Redis用作Sub订阅与发布Pub
Redis用作Sub订阅与发布Pub
本作者从下载地址:https://download.csdn.net/download/LongtengGensSupreme/12157626下载redis包解压到本地文件目录:E:\Source\redisfile\Redis-x64-3.2.100,如下图所示
为了方便启动,我们在该目录下新建一个 startredis.bat 的文件,
然后将以下内容写入文件:redis-server redis.windows.conf
这个命令其实就是在调用 redis-server.exe 命令来读取 redis.window.conf 的内容,
双击刚才创建好的 startredis.bat 文件,就能成功的看到 Redis 启动,如下图所示:
redis-server启动之后放着就可以了。可以使用客户端自带工具来测试redis服务器是否可用,
Redis 自带的一个客户端工具,它可以用来连接到我们当前的 Redis 服务器,点击同一个文件夹下的 redis-cli.exe 文件,启动客户端,如下图
redis-cli客户端启动成功,如下图所示
我们做以下测试:在客户端dos界面输入 set key1 value1,回车,可以看到客户端显示:
在输入 get key1 回车,客户端显示:
通过上述工作,我们便在 Windows 的环境下安装好了Redis,我们的准备工作已完成。下面添加简单的使用Redis用作Sub订阅与发布Pub的案例,
以商品购买为案例,下单--》增加积分--》发送购买成功短信通知,如下:
1、新建控制台项目net console 控制台或者net core console控制台都可以,本文使用的是net core console控制台,取名 NetCoreConsoleTest,
在项目下添加积分类Order.cs和短信通知类SMS.cs
积分类Order.cs
using System; namespace NetCoreConsoleTest { /// <summary> /// 积分处理 /// </summary> public class Order { /// <summary> /// 积分订单 /// </summary> public void AddOrder(string sn) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); Console.WriteLine($"订单 {sn} 处理积分完成"); } } }
短信通知类SMS.cs
using System; namespace NetCoreConsoleTest { /// <summary> /// 短信处理 /// </summary> public class SMS { /// <summary> /// 短信订单 /// </summary> public void AddSMS(string sn) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); Console.WriteLine($"订单 {sn} 处理发送短信完成"); } } }
NetCoreConsoleTest的Program.cs测试
using StackExchange.Redis; using System; using System.Diagnostics; namespace NetCoreConsoleTest { class Program { static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Console.WriteLine("...........网购处理过程............"); string sn = $"WG{DateTime.Now.ToString("yyyMMddHHmmssfffffff")}"; Console.WriteLine("...........处理订单............"); Console.WriteLine($"订单 {sn} 处理完成"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); #region 一般使用 Console.WriteLine("......................."); Console.WriteLine("...........处理订单积分............"); Order order = new Order(); order.AddOrder(sn); Console.WriteLine("......................."); Console.WriteLine("...........处理订单发送短息............"); SMS sMS = new SMS(); sMS.AddSMS(sn); #endregion stopwatch.Stop(); Console.WriteLine($"...........网购完成,总共用时{stopwatch.ElapsedMilliseconds}............"); Console.ReadKey(); } } }
测试结果:
可以看到整个过程在3秒左右,
下面使用Redis用作Sub订阅与发布Pub
1、项目NetCoreConsoleTest,NuGet程序包管理,添加 StackExchange.Redis,然后添加SubAndPub.cs
using StackExchange.Redis; using System; namespace NetCoreConsoleTest { /// <summary> /// 订阅与发布 /// </summary> public class SubAndPub { ConnectionMultiplexer multiplexer; public SubAndPub() { multiplexer = ConnectionMultiplexer.Connect("localhost:6379"); } /// <summary> /// 订阅 /// </summary> public void Sub(Action<RedisChannel, RedisValue> handler) { ISubscriber subscriber = multiplexer.GetSubscriber(); subscriber.Subscribe("pub_sub", handler); } /// <summary> /// 发布 /// </summary> public void Pub(RedisValue message) { ISubscriber subscriber = multiplexer.GetSubscriber(); subscriber.Publish("pub_sub", message); } } }
2、添加控制台项目OrderForm和SMSForm
项目OrderForm
using NetCoreConsoleTest; using System; namespace OrderForm { public class Program { static void Main(string[] args) { Console.WriteLine("积分"); SubAndPub subAndPub = new SubAndPub(); subAndPub.Sub((a, b) => { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); Console.WriteLine($"订单 {b}, 处理积分完成"); }); Console.ReadKey(); } } }
项目SMSForm
using NetCoreConsoleTest; using System; namespace SMSForm { public class Program { static void Main(string[] args) { Console.WriteLine("短信"); SubAndPub subAndPub = new SubAndPub(); subAndPub.Sub((a, b) => { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); Console.WriteLine($"订单 {b} 发送短信完成"); }); Console.ReadKey(); } } }
NetCoreConsoleTest的Program中修改为如下
using StackExchange.Redis; using System; using System.Diagnostics; namespace NetCoreConsoleTest { class Program { static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); #region pub sub 订阅发布 string sn = null; SubAndPub subAndPub = new SubAndPub(); for (int i = 0; i < 20; i++) { sn = $"WG{DateTime.Now.ToString("yyyMMddHHmmssfffffff")}"; Console.WriteLine($"生成第 {i} 个订单,订单号:{sn}"); Console.WriteLine("...........处理订单............"); Console.WriteLine($"订单 {sn} 处理完成"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); //发布 subAndPub.Pub(sn); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion stopwatch.Stop(); Console.WriteLine($"...........网购完成,总共用时{stopwatch.ElapsedMilliseconds}............"); Console.ReadKey(); } } }
生成上述NetCoreConsoleTest,OrderForm和SMSForm三个项目,然后启动redis服务器,先启动OrderForm和SMSForm项目,然后启动 NetCoreConsoleTest项目,运行结果
代码代码:https://download.csdn.net/download/LongtengGensSupreme/12254559