博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET中Redis安装部署及使用方法简介
阅读量:6913 次
发布时间:2019-06-27

本文共 7336 字,大约阅读时间需要 24 分钟。

  

  Redis是一个的Key/Value的内存数据库,、Github、 等大型应用中都用其作为缓存,Redis的官网为。

  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,这是链接:

1.点击客户端安装程序,下一步....,完成打开客户端界面就可以了,省略安装截图。

  2.打开界面,客户端默认读取到6379的端口,会创建一个6379的Redis服务器

  由于我更改了6379的端口号,导致Redis客户端默认创建的localhost服务器启动不成功,这里只需要右击修改一下端口号就可以了。

三、C#访问Redis

下载ServiceStack.Redis

和MongoDB一样,在.NET中使用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

转载于:https://www.cnblogs.com/jbps/p/5750162.html

你可能感兴趣的文章
centos rocksdb 性能测试笔记(二)
查看>>
iOS开发之多线程浅析
查看>>
jquery 读书笔记
查看>>
修改监控录像时间的方法以及基础常识,必看! ...
查看>>
Troubleshooting High CPU Usage on Alibaba Cloud SQL Server
查看>>
手把手教你监督学习(附python实战代码)
查看>>
DataSet筛选数据然后添加到新的DataSet中引发的一系列血案
查看>>
设置select下拉菜单的默认选中项
查看>>
exe4j的使用
查看>>
TNS-12535 TNS-00505的处理方法
查看>>
R语言:数据输出至文件
查看>>
Linux下搭建 NFS
查看>>
VR AR创新创业大赛顺利收官,行业大咖看好移动VR发展
查看>>
Vive戴起来不够舒服?SynergyWiz为其设计了翻盖
查看>>
新年快乐,介绍个简单的Excel理财工作的制作方法
查看>>
[翻译-ASP.NET MVC]Contact Manager开发之旅之迭代1 - 创建Contact Manager应用
查看>>
Linux C 下使用openssl 进行SHA1加密
查看>>
4星|《我的第一本创业融资指南》:投资人写的创业者融资指南
查看>>
再现一分钱中标,中国电信拿下海南政务云项目
查看>>
文件服务器之二:FTP服务器(pureftp)
查看>>