.NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

  

  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。

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

 一、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公共类库参考

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();
         }
     }
}

 


本文转自yonghu86博客园博客,原文链接:http://www.cnblogs.com/huyong/p/5614513.html,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
NoSQL Java Redis
SpringBoot 配置Redis操作
SpringBoot 配置Redis操作
49 0
|
3月前
|
存储 NoSQL 关系型数据库
使用lua脚本操作redis
使用lua脚本操作redis
50 0
|
3月前
|
设计模式 NoSQL Java
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
|
4月前
|
NoSQL Redis
redis常用数据结构和操作
redis常用数据结构和操作
30 0
|
3月前
|
NoSQL Java Redis
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
52 0
|
3月前
|
缓存 NoSQL Java
RedisTemplate操作Redis,这一篇文章就够了
redis是一款开源的Key-Value数据库,运行在内存中,由C语言编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 等。
231 1
|
27天前
|
存储 NoSQL Java
Redis 数据结构操作入门
Redis 数据结构操作入门
15 0
|
1月前
|
缓存 NoSQL 数据库
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
|
1月前
|
存储 NoSQL Redis
如何在Python中操作Redis数据库
如何在Python中操作Redis数据库
29 0
|
1月前
|
负载均衡 NoSQL 容灾