发布/订阅,故名思义,就是一个发布消息,多个订阅的客户端都收到这个消息。
举两个实际的例子,第一个想到的是电台,电台在专属的调频上播出节目,多个收音机只要在这个调频上,就可以收听到这个电台节目。
另一个例子是博客的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); } }