一、安装 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”。