Redis公布订阅以及StackExchange,Redis中的使用

本文版权归微博和笔者自己李天乐共同全数,转发请注解本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位,达成起来很简短,在报警系统元帅你的手提式有线电话机号和短信写死在先后中。可是一旦您的品种庞大,种种模块有分其他领导者,并且监护人也时不时会转移,那么我们就不可能总修改代码了吧?

譬如你的线上利用使用,你想设置3个日志报告警察方系统,当使用出现至极的时候,立马发送通告给您,可能是短信的款式,也大概是邮件的款式。当然假诺只将报告警察方布告给您1位,完成起来相当粗略,在报告警察方系统大校你的手提式有线电话机号和短信写死在程序中。可是借使你的花色庞大,每种模块有独家的长官,并且管事人也每每会改变,那么大家就无法总修改代码了呢?

可能说你的个人博客能够让读者订阅,读者这么多,大家根本控制不东山再起啊。

大概说你的私人住房博客能够让读者订阅,读者这么多,我们根本控制不东山再起啊。

今昔公布订阅形式,就足以缓解你的题材。在某一点产生转移的时候,其余客户端即时收获关照。也足以说订阅服务器获得运用发表新闻,由服务器立刻通报给您手中的客户端。这样的便宜就是1种松耦合的格局,你不再需求修改发表端和订阅端的任何代码,你即使提供好宣布和订阅的操作接口,未来调用就足以了。

今日公告订阅格局,就能够消除您的题材。在某一点产生变动的时候,其余客户端即时收获关照。也足以说订阅服务器获得应用公布音信,由服务器立刻通报给您手中的客户端。那样的益处正是1种松耦合的形式,你不再要求修改发表端和订阅端的任何代码,你如若提供好公布和订阅的操作接口,今后调用就足以了。

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

先是看一下Redis在控制苏州的公布订阅操作。

本身敞开八个redis命令客户端对相同的多个redis服务举办操作。

本人打开五个redis命令客户端对相同的叁个redis服务开始展览操作。

第一大家在率先个客户端咱们对message0一举办订阅,channel名称是大家自定义的,订阅哪个正是哪个。

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

爱博体育app下载 1

爱博体育app下载 2

其次,大家在第二个客户端对message0一那么些channel举办业揭橥布音信。重临值表示有几个客户端订阅。

支持,我们在其次个客户端对message0一那么些channel进行透露新闻。再次回到值表示有多少个客户端订阅。

爱博体育app下载 3

爱博体育app下载 4

文告信息后,订阅的客户端即时受收取音讯。

透露音讯后,订阅的客户端即时受收到音信。

爱博体育app下载 5

爱博体育app下载 6

爱博体育app下载,StackExchange.Redis操作揭橥订阅

StackExchange.Redis操作发表订阅

总归大家不容许只将其用在Redis命令控制台哈,最终来看一下在.NET中的使用。大家照样凭借StackExchange.

到底大家不大概只将其用在Redis命令控制台哈,最终来看一下在.NET中的使用。我们照样凭借StackExchange.

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

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

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

布署中,定义了使用并行的不2秘诀来执行命令,大大提高了频率(在您冷淡消息传递的一方今,能够如此使用)。

布置中,定义了选择并行的主意来执行命令,大大进步了频率(在您冷淡音信传递的相继时,能够如此使用)。

在接口中定义如下方法:

在接口中定义如下方法:

 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和3个Winform程序,并在里面定义五个按钮。代码如下:

客户端测试,我将确立3个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         }

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

将四个使用运营起来,操作以及结果如下:

爱博体育app下载 7

爱博体育app下载 8

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

上边操作四个按钮,得到结果。

爱博体育app下载 9

爱博体育app下载 10

 

订阅成功。

订阅成功。

借使自己的有数分享,对您能有有个别赞助,欢迎点赞帮衬,也欢迎大牌们不断关切和给予指点建议。

 

假定自个儿的一定量分享,对您能有几许增加接济,欢迎点赞支持,也欢迎大拿们不停关切和给予辅导建议。

 

相关文章