Loading

Redis的使用(三)—— .NET 使用 Redis

一、安装 ServiceStack.Redis Nuget程序包

 

 通过Nuget添加ServiceStack.Redis程序包,添加成功后,即可进行程序的开发。

二、Redis的写入读取、订阅发布

 1  public class RedisClient
 2     {
 3         private ServiceStack.Redis.RedisClient client = null;
 4 
 5         // 发布消息的客户端
 6         private ServiceStack.Redis.RedisClient client_pub = null;
 7 
 8         public RedisClient(string ip,int port,string password=null,int db=0)
 9         {
10             client     = new ServiceStack.Redis.RedisClient(ip, port, password, db);
11             client_pub = new ServiceStack.Redis.RedisClient(ip, port, password, db);
12             Console.WriteLine($"redis启动成功!");
13         }
14 
15         /// <summary>
16         /// 读取
17         /// </summary>
18         /// <typeparam name="T"></typeparam>
19         /// <param name="key"></param>
20         /// <returns></returns>
21         public T GetKeyValue<T>(string key)
22         {
23 
24             return client.Get<T>(key);
25         }
26 
27         /// <summary>
28         /// 存储
29         /// </summary>
30         /// <typeparam name="T"></typeparam>
31         /// <param name="key"></param>
32         /// <param name="value"></param>
33         /// <returns></returns>
34         public bool SetKeyValue<T>(string key,T value)
35         {
36            return  client.Set<T>(key,value);
37         }
38 
39 
40         /// <summary>
41         /// 订阅
42         /// </summary>
43         public void Subscribe()
44         {
45             //创建订阅
46             IRedisSubscription subscription = client.CreateSubscription();
47 
48             //接受到消息时
49             subscription.OnMessage += (channel,cmd)=>
50             {
51                 Console.WriteLine($"接受到消息时:消息通道:{channel},消息内容:{cmd}");
52             };
53 
54             //订阅频道时
55             subscription.OnSubscribe = (channel) =>
56             {
57                 Console.WriteLine($"订阅客户端:开始订阅消息通道:{channel}");
58             };
59 
60             //取消订阅频道时
61             subscription.OnUnSubscribe = (channel) => 
62             { 
63                 Console.WriteLine($"订阅客户端:取消订阅消息通道:{channel}");
64             };
65 
66             //订阅频道
67             subscription.SubscribeToChannels("channel1", "channel2");
68         }
69 
70         public void Publish()
71         {
72             client_pub.PublishMessage("channel1", $"{DateTime.Now.ToShortTimeString()} 通道 channel1 的消息");
73             client_pub.PublishMessage("channel2", $"{DateTime.Now.ToShortTimeString()} 通道 channel1 的消息");
74         }
75     }
 1  static void Main(string[] args)
 2         {
 3             var redis = new RedisClient("127.0.0.1", 6379);
 4 
 5             // 写入
 6             redis.SetKeyValue<string>("name", "dwayne");
 7             redis.SetKeyValue<int>("age", 26);
 8 
 9             // 读取
10             Console.WriteLine($"name的数值:{redis.GetKeyValue<string>("name")}");
11             Console.WriteLine($"age的数值:{redis.GetKeyValue<string>("age")}");
12 
13 
14 
15             // 订阅
16             Task.Run(() =>
17             {
18                 redis.Subscribe();
19             });
20 
21             // 发布
22             Console.WriteLine("是否启动Redis发布:Y(启动),N(不启动)");
23             if (Console.ReadLine() == "Y")
24             {
25                 redis.Publish();
26             }
27 
28             Console.ReadKey();
29         }

具体运行结果如下图所示:

 

示例代码:https://github.com/Dwayne112401/RedisDemo

 注意:发布和订阅不能是同一个Redis连接,发布和订阅必须各自启动Redis连接,否则会报错 “only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context”。

posted @ 2020-12-09 23:12  Dwaynerbing  阅读(410)  评论(0编辑  收藏  举报