发布/订阅,故名思义,就是一个发布消息,多个订阅的客户端都收到这个消息。

举两个实际的例子,第一个想到的是电台,电台在专属的调频上播出节目,多个收音机只要在这个调频上,就可以收听到这个电台节目。

另一个例子是博客的RSS,只要博言主发表了博客,只要订阅了该博客的人都会收到通知邮件。

下面就结合redis的相关命令来看一下。

publish channel message,将信息message发送到指的频道channel。

subscribe channel [channel ...] 订阅给定的一个或多个频道的信息。

Psubscribe pattern [pattern ...] 订阅一个或多个符合给定模式的频道。

clipboard

clipboard[1]

看到了吧,这就是传说中的发布订阅。

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);

            }

        }
posted on 2015-12-28 16:04  永远的麦子  阅读(2109)  评论(0编辑  收藏  举报