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 Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp