Redis用作Sub订阅与发布Pub

2024-03-08 17:50
文章标签 redis 发布 订阅 sub 用作 pub

本文主要是介绍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 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);#endregionstopwatch.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));}#endregionstopwatch.Stop();Console.WriteLine($"...........网购完成,总共用时{stopwatch.ElapsedMilliseconds}............");Console.ReadKey();}}
}

生成上述NetCoreConsoleTest,OrderForm和SMSForm三个项目,然后启动redis服务器,先启动OrderForm和SMSForm项目,然后启动 NetCoreConsoleTest项目,运行结果

完整代码:https://download.csdn.net/download/LongtengGensSupreme/12254559

这篇关于Redis用作Sub订阅与发布Pub的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787909

相关文章

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.