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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
相关文章
|
6天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
26天前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
79 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
12天前
|
关系型数据库 C# 数据库
.NET 8.0 开源在线考试系统(支持移动端)
【10月更文挑战第27天】以下是适用于 .NET 8.0 的开源在线考试系统(支持移动端)的简介: 1. **基于 .NET Core**:跨平台,支持多种数据库,前后端分离,适用于多操作系统。 2. **结合 Blazor**:使用 C# 开发 Web 应用,支持响应式设计,优化移动端体验。 3. **基于 .NET MAUI**:跨平台移动应用开发,一套代码多平台运行,提高开发效率。 开发时需关注界面设计、安全性与稳定性。
|
12天前
|
存储 缓存 监控
介绍一下Redis的使用方法
【10月更文挑战第19天】介绍一下Redis的使用方法
|
18天前
|
NoSQL Ubuntu Linux
Redis 安装
10月更文挑战第14天
46 1
|
22天前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
163 3
|
23天前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
28天前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
52 8
|
23天前
|
Linux C# Android开发
.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms
.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms
109 1
|
23天前
|
存储 数据可视化 开发工具
2款.NET开源且免费的Git可视化管理工具
2款.NET开源且免费的Git可视化管理工具