.NET中Redis安裝部署及使用方法簡介

  

  Redis是一個用的比較普遍的Key/Value的內存數據庫,新浪微博、Github、StackOverflow 等大型應用中都用其做爲緩存,Redis的官網爲http://redis.io/html

  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可執行單層樹複製。存盤能夠有意無心的對數據進行寫操做。因爲徹底實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操做的可擴展性和數據冗餘頗有幫助。git

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

  工具下載位置:http://pan.baidu.com/s/1jILIzLs,包括服務端配置以及查看緩存的工具。redis

 1、Redis服務端以服務方式運行

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

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

  注意卸載服務的命令爲:windows

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

到控制面板查看服務已經安裝成功了,注意首次安裝時默認沒有啓動,單擊啓動便可。服務器

 工具配置,安裝後以下圖

鏈接成功後,就能夠查看緩存中的數據了app

 2、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服務器啓動不成功,這裏只須要右擊修改一下端口號就能夠了。

3、C#訪問Redis

下載ServiceStack.Redis

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

.NET項目中使用Redis

ServerStack中有不少方法能夠在.NET中調用,其類結構圖以下:

 

Redis公共類庫參考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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();
         }
     }
}

 以上博文出自:http://www.cnblogs.com/huyong/p/5614513.html

相關文章
相關標籤/搜索