自然要是只将报警布告给你1位,当然要是只将报告警方布告给您1个人

正文版权归搜狐和小编自身刘毛毛共同拥有,转发请注脚本Redis类别分享地址。http://www.cnblogs.com/tdws/tag/NoSql/

正文版权归博客园和作者本身李继宏共同拥有,转发请注脚本Redis类别分享地址。http://www.cnblogs.com/tdws/tag/NoSql/

Redis Pub/Sub方式 基本介绍

Redis Pub/Sub情势 基本介绍

Redis公布订阅—Pub/Sub格局可能说是观望者格局。作者想大家正是没有使用过,也早就深谙了。

Redis公布订阅—Pub/Sub形式恐怕说是观看者形式。笔者想大家就是没有行使过,也早就熟练了。

先不难举例表达下利用场景,在情景中我们得以分析到其优势在哪。

先简单举例表达下利用场景,在气象中大家得以分析到其优势在哪。

比如说你的线上运用使用,你想设置1个日记报告警方系统,当使用出现相当的时候,立马发送布告给您,恐怕是短信的样式,也大概是邮件的方式。当然假使只将报告警方通告给您一位,达成起来很简单,在报告警方系统元帅你的手提式无线电电话机号和短信写死在先后中。不过只要您的品类庞大,每一种模块有分其余领导者,并且监护人也时不时会变动,那么大家就不能够总修改代码了吧?

诸如你的线上应用使用,你想设置一个日记报告警方系统,当使用出现非凡的时候,立马发送布告给你,可能是短信的款式,也或许是邮件的款式。当然假诺只将报告警方通知给你壹人,实现起来很简单,在报告警方系统少校你的手提式有线电话机号和短信写死在程序中。可是倘若您的品类庞大,每种模块有各自的首长,并且管事人也通常会变动,那么大家就不能总修改代码了吗?

只怕说你的私有博客能够让读者订阅,读者这么多,大家根本控制不回复啊。

或许说你的民用博客能够让读者订阅,读者这么多,我们根本控制不回复啊。

当今公布订阅形式,就足以缓解你的题材。在某一点产生变更的时候,别的客户端即时获得关照。也足以说订阅服务器得到运用发表新闻,由服务器立刻通报给您手中的客户端。那样的裨益便是一种松耦合的格局,你不再需求修改发表端和订阅端的任何代码,你一旦提供好发布和订阅的操作接口,现在调用就足以了。

现行反革命表露订阅方式,就能够缓解你的难点。在某一点发出转移的时候,其余客户端即时获得布告。也得以说订阅服务器获得运用宣布消息,由服务器立刻文告给你手中的客户端。这样的裨益就是一种松耦合的方式,你不再必要修改发表端和订阅端的任何代码,你即便提供好公布和订阅的操作接口,今后调用就可以了。

率先看一下Redis在控制纽伦堡的公布订阅操作。

先是看一下Redis在控制哈博罗内的发布订阅操作。

自家张开四个redis命令客户端对同样的叁个redis服务拓展操作。

本人张开四个redis命令客户端对同一的七个redis服务拓展操作。

第①大家在第2个客户端大家对message01实行订阅,channel名称是大家自定义的,订阅哪个正是哪位。

先是大家在率先个客户端我们对message01举行订阅,channel名称是大家自定义的,订阅哪个正是哪个。

图片 1

图片 2

其次,我们在第3个客户端对message01那几个channel进行发布新闻。重临值表示有多少个客户端订阅。

扶助,我们在其次个客户端对message01这么些channel进行业公布布新闻。重临值表示有多少个客户端订阅。

图片 3

图片 4

颁发信息后,订阅的客户端即时受收取音信。

揭橥新闻后,订阅的客户端即时受收到音讯。

图片 5

图片 6

StackExchange.Redis操作发表订阅

StackExchange.Redis操作公布订阅

毕竟大家不或然只将其用在Redis命令控制台哈,最终来看一下在.NET中的使用。大家仍然凭借StackExchange.

究竟我们不容许只将其用在Redis命令控制台哈,末了来看一下在.NET中的使用。大家依然凭借StackExchange.

基本功配置,本类别第3篇分享已经包罗。还记得静态构造函数中,下边这段代码吗?

基础配置,本类别第①篇分享已经包涵。还记得静态构造函数中,上面这段代码吗?

1 _redis.PreserveAsyncOrder = RedisClientConfigurations.PreserveAsyncOrder;//并行
1 _redis.PreserveAsyncOrder = RedisClientConfigurations.PreserveAsyncOrder;//并行

布署中,定义了利用并行的主意来执行命令,大大升高了频率(在你冷淡音讯传递的依次时,能够如此使用)。

布署中,定义了使用并行的格局来执行命令,大大提升了效用(在你冷淡音信传递的各样时,可以这么使用)。

在接口中定义如下方法:

在接口中定义如下方法:

 1  #region Redis发布订阅
 2         /// <summary>
 3         /// Redis发布订阅  订阅
 4         /// </summary>
 5         /// <param name="subChannel"></param>
 6         void RedisSub(string subChannel);
 7         /// <summary>
 8         /// Redis发布订阅  发布
 9         /// </summary>
10         /// <typeparam name="T"></typeparam>
11         /// <param name="channel"></param>
12         /// <param name="msg"></param>
13         /// <returns></returns>
14         long RedisPub<T>(string channel, T msg);
15         /// <summary>
16         /// Redis发布订阅  取消订阅
17         /// </summary>
18         /// <param name="channel"></param>
19         void Unsubscribe(string channel);
20         /// <summary>
21         /// Redis发布订阅  取消全部订阅
22         /// </summary>
23         void UnsubscribeAll();
24 
25         #endregion
 1  #region Redis发布订阅 2         /// <summary> 3         /// Redis发布订阅  订阅 4         /// </summary> 5         /// <param name="subChannel"></param> 6         void RedisSub(string subChannel); 7         /// <summary> 8         /// Redis发布订阅  发布 9         /// </summary>10         /// <typeparam name="T"></typeparam>11         /// <param name="channel"></param>12         /// <param name="msg"></param>13         /// <returns></returns>14         long RedisPub<T>(string channel, T msg);15         /// <summary>16         /// Redis发布订阅  取消订阅17         /// </summary>18         /// <param name="channel"></param>19         void Unsubscribe(string channel);20         /// <summary>21         /// Redis发布订阅  取消全部订阅22         /// </summary>23         void UnsubscribeAll();24 25         #endregion

兑现如下:

落到实处如下:

 1  #region Redis发布订阅
 2         /// <summary>
 3         /// Redis发布订阅  订阅
 4         /// </summary>
 5         /// <param name="subChannel"></param>
 6         public void RedisSub(string subChannel)
 7         {
 8             sub.Subscribe(subChannel, (channel, message) =>
 9             {
10                 Console.WriteLine((string)message);
11             });
12         }
13         /// <summary>
14         /// Redis发布订阅  发布
15         /// </summary>
16         /// <typeparam name="T"></typeparam>
17         /// <param name="channel"></param>
18         /// <param name="msg"></param>
19         /// <returns></returns>
20         public long RedisPub<T>(string channel, T msg)
21         {
22 
23             return sub.Publish(channel, SerializeContent(msg));
24         }
25         /// <summary>
26         /// Redis发布订阅  取消订阅
27         /// </summary>
28         /// <param name="channel"></param>
29         public void Unsubscribe(string channel)
30         {
31             sub.Unsubscribe(channel);
32         }
33         /// <summary>
34         /// Redis发布订阅  取消全部订阅
35         /// </summary>
36         public void UnsubscribeAll()
37         {
38             sub.UnsubscribeAll();
39         }
40         #endregion
 1  #region Redis发布订阅 2         /// <summary> 3         /// Redis发布订阅  订阅 4         /// </summary> 5         /// <param name="subChannel"></param> 6         public void RedisSub(string subChannel) 7         { 8             sub.Subscribe(subChannel, (channel, message) => 9             {10                 Console.WriteLine((string)message);11             });12         }13         /// <summary>14         /// Redis发布订阅  发布15         /// </summary>16         /// <typeparam name="T"></typeparam>17         /// <param name="channel"></param>18         /// <param name="msg"></param>19         /// <returns></returns>20         public long RedisPub<T>(string channel, T msg)21         {22 23             return sub.Publish(channel, SerializeContent;24         }25         /// <summary>26         /// Redis发布订阅  取消订阅27         /// </summary>28         /// <param name="channel"></param>29         public void Unsubscribe(string channel)30         {31             sub.Unsubscribe;32         }33         /// <summary>34         /// Redis发布订阅  取消全部订阅35         /// </summary>36         public void UnsubscribeAll()37         {38             sub.UnsubscribeAll();39         }40         #endregion

客户端测试,作者将建立四个ConsoleApp和八个Winform程序,并在在那之中定义三个按钮。代码如下:

客户端测试,笔者将确立2个ConsoleApp和三个Winform程序,并在里边定义多少个按钮。代码如下:

在ConsoleApp中我们作为订阅

在ConsoleApp中大家作为订阅

1      static void Main(string[] args)
2         {
3             IRedisClient client = new RedisClient();
4 
5             client.RedisSub("myFirstChannel");
6             client.RedisSub("mySecondChannel");
7          }          
1      static void Main(string[] args)2         {3             IRedisClient client = new RedisClient();4 5             client.RedisSub("myFirstChannel");6             client.RedisSub("mySecondChannel");7          }          

在Winform主次中开始展览发表

在Winform主次中举办发表

 1  IRedisClient client = new RedisClient();
 2         private void button1_Click(object sender, EventArgs e)
 3         {
 4             client.RedisPub("myFirstChannel", "first");
 5         }
 6 
 7         private void button2_Click(object sender, EventArgs e)
 8         {
 9             client.RedisPub("mySecondChannel", "second");
10         }
 1  IRedisClient client = new RedisClient(); 2         private void button1_Click(object sender, EventArgs e) 3         { 4             client.RedisPub("myFirstChannel", "first"); 5         } 6  7         private void button2_Click(object sender, EventArgs e) 8         { 9             client.RedisPub("mySecondChannel", "second");10         }

将七个利用运转起来,操作以及结果如下:

将多少个利用运转起来,操作以及结果如下:

图片 7

图片 8

上边操作多个按钮,获得结果。

上边操作八个按钮,获得结果。

图片 9

图片 10

 

订阅成功。

订阅成功。

若是本人的点滴分享,对您能有有个别声援,欢迎点赞协理,也欢迎大腕们连连关心和给予指引提出。

 

若果本人的星星点点分享,对您能有几许帮扶,欢迎点赞援助,也欢迎大牌们不断关切和给予指引提议。

 

相关文章