发布/订阅,故名思义,就是一个发布消息,多个订阅的客户端都收到这个消息。
举两个实际的例子,第一个想到的是电台,电台在专属的调频上播出节目,多个收音机只要在这个调频上,就可以收听到这个电台节目。
另一个例子是博客的RSS,只要博言主发表了博客,只要订阅了该博客的人都会收到通知邮件。
下面就结合redis的相关命令来看一下。
publish channel message,将信息message发送到指的频道channel。
subscribe channel [channel ...] 订阅给定的一个或多个频道的信息。
Psubscribe pattern [pattern ...] 订阅一个或多个符合给定模式的频道。
看到了吧,这就是传说中的发布订阅。
StackExchange.Redis中的发布订阅
发布消息:ISubscriber.Publish(string channel, string message);
订阅消息:ISubscriber.Subscribe(string channel, Action<string channel, string message> action);
订阅时要异步去做,单独一个线程一直监听。
可以参考如下代码。
发布消息:
subscriber.Publish(PbsRedisSubscribeChannels.ClearCacheChannel, message);
订阅:
public static void StartListenClearCache() { _listenTask = Task.Factory.StartNew(() => { Listen(); }, TaskCreationOptions.LongRunning); } /// <summary> /// 监听线程内容:监听发布的消息 /// </summary> private static void Listen() { try { var client = RedisHelper.GetClientManager(); var subscriber = client.GetSubscriber(); subscriber.Subscribe(PbsRedisSubscribeChannels.ClearCacheChannel, HandleSubsMessage); subscriber.Subscribe(PbsRedisSubscribeChannels.ReportCacheChannel, HandleSubsMessage); } catch (Exception ex) { var mailContent = $"Redis订阅异常:{AppDomain.CurrentDomain.FriendlyName}({AppDomain.CurrentDomain.BaseDirectory}){Environment.NewLine}{ex.ToString()}"; SendMail(mailContent); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架