1. 程式人生 > >.NET中Redis安裝部署及使用方法簡介附->開源Redis操作輔助類

.NET中Redis安裝部署及使用方法簡介附->開源Redis操作輔助類

  

  Redis是一個用的比較廣泛的Key/Value的記憶體資料庫,新浪微博、Github、StackOverflow 等大型應用中都用其作為快取,Redis的官網為http://redis.io/

  Redis 是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
  Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
  Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對資料進行寫操作。由於完全實現了釋出/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的訊息釋出記錄。同步對讀取操作的可擴充套件性和資料冗餘很有幫助。

  在這篇文章中我們將記錄一下Redis的安裝,以及如何在.NET中使用Redis。

 一、Redis服務端以服務方式執行

  服務端是以服務的形式執行,將Redis服務端解壓到某個目錄,然後以管理員方式執行cmd執行命令進行安裝:

redis-server.exe --service-install redis.windows.conf --loglevel verbose

  注意解除安裝服務的命令為:

redis-server.exe --service-uninstall redis.windows.conf --loglevel verbose

  注意事項,修改Redis埠及密碼的配置在檔案redis.windows-service.conf中:(使用redis284.rar中解壓檔案

修改埠,壓縮檔案中配置的是6488:

修改密碼

修改庫的數量

配置完成後,執行

redis-server.exe --service-install redis.windows.conf --loglevel verbose

到控制面板檢視服務已經安裝成功了,注意首次安裝時預設沒有啟動,單擊啟動即可。

 工具配置,安裝後如下圖

連線成功後,就可以檢視快取中的資料了

 二、Redis服務端以控制檯方式執行

  解壓下載的redis64-2.6.12.1.rar檔案,如下圖:

  第一步(配置本地服務)

  點選run這個DOS執行命令  因為是自己的電腦測試的,所以這個Redis預設的埠我們就不用修改了,如果到了正式的伺服器,一定要修改埠號,防止黑客攻擊,獲取到你的資料,畢竟資訊保安很重要,可以通過它的配置檔案來修改。
看下用NotePad++開啟配置檔案,修改過後的效果圖,這裡我修改成了6380這個埠這個就是更改過後的效果圖了,只要改了埠,再啟動run就可以發現埠號確實已經變了,第一步也已經完成了。

第二部(安裝和配置客戶端)

檔案中的“redis-desktop-manager-0.8.2.3849.exe“是2015-11-23 從Redis的官網下載的客戶端安裝包,如果有更新可以去官網下載最新的Redis,這是連結:http://redis.io/

1.點選客戶端安裝程式,下一步....,完成開啟客戶端介面就可以了,省略安裝截圖。

  2.開啟介面,客戶端預設讀取到6379的埠,會建立一個6379的Redis伺服器

  由於我更改了6379的埠號,導致Redis客戶端預設建立的localhost伺服器啟動不成功,這裡只需要右擊修改一下埠號就可以了。

三、C#訪問Redis

下載ServiceStack.Redis

和MongoDB一樣,在.NET中使用Redis其實也是使用第三方驅動,官網推薦的是使用ServiceStack.Redis 下載後解壓得到如下dll

.NET專案中使用Redis

ServerStack中有很多方法可以在.NET中呼叫,其類結構圖如下:

Redis公共類庫參考

using System;
using System.Collections.Generic;
using System.Linq;
 
namespace RDIFramework.Utilities
{
    using ServiceStack.Redis;
    using ServiceStack.Redis.Generic;
 
    /// <summary>
    /// Redis公共輔助類庫
    /// </summary>
    public class RedisHelper : IDisposable
    {
        public RedisClient Redis = new RedisClient("127.0.0.1", 6379);
        //快取池
        PooledRedisClientManager prcm = new PooledRedisClientManager();
 
        //預設快取過期時間單位秒
        public int secondsTimeOut = 30 * 60;
 
        /// <summary>
        /// 緩衝池
        /// </summary>
        /// <param name="readWriteHosts"></param>
        /// <param name="readOnlyHosts"></param>
        /// <returns></returns>
        public static PooledRedisClientManager CreateManager(
         string[] readWriteHosts, string[] readOnlyHosts)
        {
            return new PooledRedisClientManager(readWriteHosts, readOnlyHosts,
                new RedisClientManagerConfig
                {
                    MaxWritePoolSize = readWriteHosts.Length * 5,
                    MaxReadPoolSize = readOnlyHosts.Length * 5,
                    AutoStart = true,
                });// { RedisClientFactory = (IRedisClientFactory)RedisCacheClientFactory.Instance.CreateRedisClient("127.0.0.1", 6379) };          
        }
        /// <summary>
        /// 建構函式
        /// </summary>
        /// <param name="openPooledRedis">是否開啟緩衝池</param>
        public RedisHelper(bool openPooledRedis = false)
        {
            if (openPooledRedis)
            {
                prcm = CreateManager(new string[] { "127.0.0.1:6379" }, new string[] { "127.0.0.1:6379" });
                Redis = prcm.GetClient() as RedisClient;
            }
        }
 
        #region Key/Value儲存
        /// <summary>
        /// 設定快取
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key">快取建</param>
        /// <param name="t">快取值</param>
        /// <param name="timeout">過期時間,單位秒,-1:不過期,0:預設過期時間</param>
        /// <returns></returns>
        public bool Set<T>(string key, T t, int timeout = 0)
        {
            if (timeout >= 0)
            {
                if (timeout > 0)
                {
                    secondsTimeOut = timeout;
                }
                Redis.Expire(key, secondsTimeOut);
            }
 
            return Redis.Add<T>(key, t);
        }
        /// <summary>
        /// 獲取
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T Get<T>(string key)
        {
            return Redis.Get<T>(key);
        }
        /// <summary>
        /// 刪除
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Remove(string key)
        {
            return Redis.Remove(key);
        }
 
        public bool Add<T>(string key, T t, int timeout)
        {
            if (timeout >= 0)
            {
                if (timeout > 0)
                {
                    secondsTimeOut = timeout;
                }
                Redis.Expire(key, secondsTimeOut);
            }
            return Redis.Add<T>(key, t);
        }
        #endregion
 
        #region 連結串列操作
        /// <summary>
        /// 根據IEnumerable資料新增連結串列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listId"></param>
        /// <param name="values"></param>
        /// <param name="timeout"></param>
        public void AddList<T>(string listId, IEnumerable<T> values, int timeout = 0)
        {
            Redis.Expire(listId, 60);
            IRedisTypedClient<T> iredisClient = Redis.As<T>();
            if (timeout >= 0)
            {
                if (timeout > 0)
                {
                    secondsTimeOut = timeout;
                }
                Redis.Expire(listId, secondsTimeOut);
            }
            var redisList = iredisClient.Lists[listId];
            redisList.AddRange(values);
            iredisClient.Save();
        }
        /// <summary>
        /// 新增單個實體到連結串列中
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listId"></param>
        /// <param name="Item"></param>
        /// <param name="timeout"></param>
        public void AddEntityToList<T>(string listId, T Item, int timeout = 0)
        {
            IRedisTypedClient<T> iredisClient = Redis.As<T>();
            if (timeout >= 0)
            {
                if (timeout > 0)
                {
                    secondsTimeOut = timeout;
                }
                Redis.Expire(listId, secondsTimeOut);
            }
            var redisList = iredisClient.Lists[listId];
            redisList.Add(Item);
            iredisClient.Save();
        }
        /// <summary>
        /// 獲取連結串列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listId"></param>
        /// <returns></returns>
        public IEnumerable<T> GetList<T>(string listId)
        {
            IRedisTypedClient<T> iredisClient = Redis.As<T>();
            return iredisClient.Lists[listId];
        }
        /// <summary>
        /// 在連結串列中刪除單個實體
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listId"></param>
        /// <param name="t"></param>
        public void RemoveEntityFromList<T>(string listId, T t)
        {
            IRedisTypedClient<T> iredisClient = Redis.As<T>();
            var redisList = iredisClient.Lists[listId];
            redisList.RemoveValue(t);
            iredisClient.Save();
        }
        /// <summary>
        /// 根據lambada表示式刪除符合條件的實體
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listId"></param>
        /// <param name="func"></param>
        public void RemoveEntityFromList<T>(string listId, Func<T, bool> func)
        {
            using (IRedisTypedClient<T> iredisClient = Redis.As<T>())
            {
                var redisList = iredisClient.Lists[listId];
                T value = redisList.Where(func).FirstOrDefault();
                redisList.RemoveValue(value);
                iredisClient.Save();
            }
        }
        #endregion
        //釋放資源
        public void Dispose()
        {
            if (Redis != null)
            {
                Redis.Dispose();
                Redis = null;
            }
            GC.Collect();
        }
    }
}


相關推薦

.NETRedis安裝部署使用方法簡介->開源Redis操作輔助

    Redis是一個用的比較廣泛的Key/Value的記憶體資料庫,新浪微博、Github、StackOverflow 等大型應用中都用其作為快取,Redis的官網為http://redis.io/。  Redis 是一個key-value儲存系統。和Memcached類

redis-rdb-tools安裝部署使用

resp oot 用戶 all mov json格式 odin hash 出現 redis內存分析工具redis-rdb-tools安裝部署項目地址:https://github.com/sripathikrishnan/redis-rdb-tools 安裝部署 安裝Py

Linux 下Redis叢集安裝部署使用詳解

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linu

【JIRA、Confluence中文官方技術部落格】分享JIRA、Confluence、Bamboo等Atlassian產品的安裝部署使用技巧,營造全面高效的學習交流空間。上atlassian.csdn.net下載享用,諮詢QQ:2714137330

分享JIRA、Confluence、Bamboo等Atlassian產品的安裝部署及使用技巧,營造全面高效的學習交流空間。上atlassian.csdn.net下載享用,諮詢QQ:2714137330...

Linux 下Redis叢集安裝部署使用詳解(線上和離線兩種安裝+相關錯誤解決方案)

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linux,被離線安裝坑慘了,走了很多彎路,說多

eclipsej2ee(struts2)部署相關問題釋疑

webapp 右鍵 j2e 問題 pps add 選擇 color j2ee 1、eclipse中進行web項目開發時。部署的時候和利用myeclipse部署時有非常大不同,由於在myeclipse的工具欄中有一個部署button。而且在myeclipse的prefer

zookeeper與kafka安裝部署java環境搭建

3.4 項目目錄 tin bytes result zxvf util ise cat 1. ZooKeeper安裝部署 本文在一臺機器上模擬3個zk server的集群安裝。 1.1. 創建目錄、解壓 cd /usr/ #創建項目目錄 mkdir zookeepe

ELK部署logstash安裝部署應用(二)

日誌 elk elkstack Logstash 安裝部署註意事項: Logstash基本概念:logstash收集日誌基本流程: input-->codec-->filter-->codec-->outputinput:從哪裏收集日誌。filter:發出去前進行過濾out

Ansible安裝部署常用模塊詳解

就會 新用戶 特殊 packages add chdir epel change ima Ansible命令使用 Ansible語法使用ansible <pattern_goes_here> -m <module_name> -a <argum

redis 安裝啟動設置密碼<windows>

啟動服務 不能 圖片 -s pic ron lease redis open redis 1. 安裝   1.1 下載解壓包,直接解壓到任意路徑下即可     windows下載地址:ttps://github.com/MSOpenTech/redis/relea

redis安裝部署(Centos6.9)

redis1 下載redis包,編譯安裝 wget http://download.redis.io/redis-stable.tar.gz tar xf redis-stable.tar.gz && cd redis-stable make (若有報錯安裝對應的依賴包;然後先執行

redis 安裝啟動設置密碼windows

IT tar ID window youdao 3D uda TE In http://note.youdao.com/noteshare?id=7f8b700893b6f3de6a6cbec1053e1762&sub=C84D49A9653B42E48B49BF3

Zabbix服務安裝部署監控配置

sed master edi extension 客戶 取數據 鏈接 prefix HA Zabbix服務安裝部署及監控配置 1.1 Zabbix服務介紹 官方網站:http://www.zabbix.com/ The Enterprise-class Monitori

MySQL-5.6.38 安裝部署介紹

root 準備 term p s 查詢 ace p12 libaio mmu 第1章 MySQL簡介及部署1.1 介紹1.1.1 什麽是數據數據是指對客觀事件進行記錄並可以鑒別的符號,是對客觀事物的性質、狀態以及相互關系等進行記載的物理符號或這些物理符號的組合。它是可識別的

自動化運維工具---SaltStack安裝部署簡單案例

com 常用模塊 分類 fire thead 批量部署 配置 出現 nio SaltStack原理 SaltStack由Master(服務端)和Minion(客戶端)組成,Master和Minion之間通過ZeroMQ(消息隊列)進行通訊,Master和Minion分別監

JAVAEE——宜立方商城13:Mycat數據庫分片、主從復制、讀寫分離、100%Linux成功安裝Mysql的方法

server structure chang exe under have 重新啟動 switch option 1 海量數據的存儲問題 如今隨著互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,傳統的關系性數據庫已經無法滿足快速

Memcached安裝部署基本操作

ant 通過 telnet 防火 sql com memcache 1.8 ORC 何為Memcached? Memcached 是一套開源的高性能分布式內存對象緩存系統,它將所有的數據都存儲在內存中,因為在內存中會統一維護一張巨大的Hash表,所以支持任意存儲類型的數據

redis安裝及其資料型別簡介

Windows下安裝 redis的安裝十分簡單,首先從github上下載安裝包,地址:下載地址 下載完成後解壓到c盤,為了方便操作可以將解壓後的檔案重新命名為“redis”,然後開啟一個cmd 視窗使用cd命令切換目錄到 C:\redis 之後輸入redis-server.ex

Zookeeper 安裝部署常用命令

服務管理 啟動ZK服務: zkServer.sh start 檢視ZK狀態: zkServer.sh status 停止ZK服務: zkServer.sh stop 重啟ZK服務: zkServer.sh restart 終端操作 使用 zkCli 可以簡單的對 Zo

linuxsupportconfig安裝與使用方法

由於工作原因,平時需要suse的工程師做二線技術支援,除了經常會提交kdump分析的結果給suse 工程師定位根因,而在沒有kdump生成時,經常會用的指令就是supportconfig收集系統資訊,其收集內容基本涵蓋了核心、模組、系統、服務等幾乎所有我們能想到的資訊,另外還會出一份簡單的health che