1 public class RedisHelper
2 {
3 //创建一个ConnectionMultiplexer实例。它是通过ConnectionMultiplexer.Connect 或者 ConnectionMultiplexer.ConnectAsync,
4 //传递一个连接字符串或者一个ConfigurationOptions 对象来创建的。
5 //连接字符串可以是以逗号分割的多个服务的节点, 我们仅仅需要连接一个在本地计算机中的redis服务,redis服务的默认端口是6379.
6
7 //ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
8
9 //现在你已经拥有了一个 ConnectionMultiplexer , 下面三件事情可能是你想要做的。
10 //1. 访问数据库。(注意在使用集群的情况下,一个数据库可能会分部在多个节点中)
11 //2. 使用redis的发布订阅功能
12 //3. 维护和监控一台服务器
13
14 //1.访问数据库
15
16 public void RWDatabase()
17 {
18 using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost"))
19 {
20 IDatabase db = redis.GetDatabase();
21 //写入
22 string value1 = "aaaaaa";
23 db.StringSet("key", value1);
24 //读取
25 string value2 = db.StringGet("key");
26 }
27
28 }
29
30
31 //2.使用Redis的发布订阅功能,当连接失败时 ConnectionMultiplexer 会自动重新进行订阅
32
33 /*指定消息发布的顺序(Message Order)
34 当使用 pub/sub API 时,你可以指定消息是并行还是有序的。
35 有序的意味着你不需要考虑线程安全的问题 ,同时也意味着消息会通过队列完全按照你发布的顺序来进行传递,这必然导致消息的延迟。
36 并行处理,不能保证消息是按照发布的顺序来进行处理的,你的代码也要保证当存在并发时程序运行正常,
37 消息的顺序通常是无关紧要的, 并行处理可以获得更好的性能和扩展性。
38 为确保安全,消息的传递默认是有序的。为获得更好的性能强烈建议你使用并行操作 。 这是非常简单的。
39
40 multiplexer.PreserveAsyncOrder = false;
41
42 建议并非是你配置该选项的理由, 是否适合完全取决与你订阅消息的代码。*/
43
44 /// <summary>
45 /// Redis订阅
46 /// </summary>
47 /// <param name="channel">订阅消息的通道</param>
48 public void Subscribe(string channle)
49 {
50 using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost"))
51 {
52 ISubscriber sub = redis.GetSubscriber();
53 sub.Subscribe(channle, OnDataReceive);
54 }
55
56 }
57 /// <summary>
58 /// 接收到消息的回调
59 /// </summary>
60 /// <param name="redisChannel">消息通道</param>
61 /// <param name="redisValue">消息内容</param>
62 private void OnDataReceive(RedisChannel redisChannel, RedisValue redisValue)
63 {
64
65 }
66
67 /// <summary>
68 /// Redis发布
69 /// </summary>
70 /// <param name="channel">发布消息的通道</param>
71 /// <param name="message">发布的消息内容</param>
72 public void Publish(string channel, string message)
73 {
74 using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost"))
75 {
76 ISubscriber pub = redis.GetSubscriber();
77 pub.Publish(channel, message);
78 }
79 }
80
81
82 //3.访问单个服务器
83
84 /* 有时候需要为单个服务器指定特定的命令 。
85
86 IServer server = redis.GetServer("localhost", 6379);
87
88 GetServer方法会接收一个EndPoint类或者一个唯一标识一台服务器的键值对。GetServer 方法返回一个IServer对象。 方法也可以是异步的只需要传入一个async-state
89
90 可以使用如下方法获取所有可用的终结点:
91 EndPoint[] endpoints = redis.GetEndPoints();
92
93 使用IServer可以使用所有的shell命令,比如:
94
95 DateTime lastSave = server.LastSave();
96 ClientInfo[] clients = server.ClientList();
97
98 如果报错在连接字符串后加 ,allowAdmin=true;*/
99
100 }
StackExchange.Redis 使用
点赞
收藏