Redis中的使用

正文版权归果壳网和小编本人李菲共同享有,转发请表明本Redis系列分享地址。http://www.cnblogs.com/tdws/tag/NoSql/

Redis Pub/Sub格局 基本介绍

Redis发表订阅—Pub/Sub方式大概说是观望者方式。笔者想大家正是未有动用过,也曾经熟练了。

先轻易比方表达下利用场景,在气象中大家能够深入分析到其优势在哪。

诸如您的线上行使使用,你想设置八个日记报告警察方系统,当使用出现万分的时候,立马发送布告给你,大概是短信的样式,也大概是邮件的形式。当然倘使只将报告警察方通告给你一位,达成起来很轻易,在报告警察方系统大校你的手提式有线话机号和短信写死在程序中。可是即使您的项目变得庞大,每种模块有各自的官员,並且理事也时不经常会变动,那么大家就不可能总修改代码了啊?

也许说你的私家博客能够让读者订阅,读者这么多,我们根本调控不仅水重波啊。

于今发布订阅形式,就可以消除你的难题。在某一点发出转移的时候,别的顾客端即时获得公告。也能够说订阅服务器得到利用发表新闻,由服务器马上通告给你手中的顾客端。那样的功利就是一种松耦合的方式,你不再供给修改公布端和订阅端的任何代码,你借使提供好发表和订阅的操作接口,今后调用就能够了。

第一看一下Redis在调整新北的发布订阅操作。

本身敞开七个redis命令客商端对同一的贰个redis服务实行操作。

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

图片 1

说不上,大家在第三个客户端对message01这些channel举行发表新闻。重回值表示有多少个客商端订阅。

图片 2

发布音讯后,订阅的客商端即时受收到音信。

图片 3

StackExchange.Redis操作发表订阅

百川归海大家不容许只将其用在Redis命令调整台哈,最后来看一下在.NET中的使用。我们仍旧依赖StackExchange.

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

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

客商端测量检验,笔者将创立二个ConsoleApp和二个Winform程序,并在其间定义七个开关。代码如下:

在ConsoleApp中大家作为订阅

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

在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         }

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

图片 4

上面操作八个按键,获得结果。

图片 5

 

订阅成功。

 

若是笔者的星星分享,对您能有一点声援,应接点赞协理,也迎接大拿们穿梭关怀和给予引导提议。

 

相关文章