【Redis】.net core Redis事件订阅与发布,基础篇

news2025/1/12 9:52:30

2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试!
发布与订阅(Publish/Subscribe,也简称为 Pub/Sub)是一种消息传递模式,用于解耦发布者和订阅者之间的关系。

目录

  • 一、基本概念
    • 1.1、发布者(Publisher)
    • 1.2、主题(Topic)
    • 1.3、订阅者(Subscriber)
    • 1.4、消息(Message)
  • 二、简单例子
    • 2.1、安装 NuGet 包
    • 2.2、创建 Redis 连接
    • 2.3、发布事件
    • 2.4、订阅事件
  • 三、有序集合例子
    • 3.1、安装 NuGet 包
    • 3.2、创建 Redis 连接
    • 3.3、定义一个记录表的键
    • 3.4、发布事件
    • 3.5、订阅事件
  • 四、结合Sql Server表
    • 4.1、安装 NuGet 包
    • 4.2、创建 Redis 连接和 SQL Server 连接
    • 4.3、创建数据库表以存储事件信息
    • 4.4、发布事件
    • 4.5、订阅事件

在这里插入图片描述

一、基本概念

发布与订阅(Publish/Subscribe,也简称为 Pub/Sub)是一种消息传递模式,用于解耦发布者和订阅者之间的关系。

在发布与订阅模式中,发布者(Publisher)不会直接发送消息给特定的订阅者(Subscriber),而是将消息发布到一个或多个主题(Topic)。订阅者可以选择订阅感兴趣的主题,当有消息发布到被订阅的主题时,订阅者会接收到相应的消息。

关键概念:

1.1、发布者(Publisher)

负责将消息发布到特定的主题,不关心有哪些订阅者。

1.2、主题(Topic)

消息的分类或标签,在发布消息时指定主题。

1.3、订阅者(Subscriber)

选择订阅感兴趣的主题,当有消息发布到订阅的主题时,会接收到相应的消息。

1.4、消息(Message)

发布者发送的信息,包含数据和元数据。

发布者和订阅者之间的关系是解耦的,发布者无需知道具体有哪些订阅者,而订阅者只需关注自己感兴趣的主题。
这种模式可用于实现松耦合的系统设计,使得系统更易于扩展和维护。

发布与订阅模式常被应用于异步消息传递、事件驱动编程、消息队列等场景,例如消息中间件(如 RabbitMQ、Apache Kafka)就是基于发布与订阅模式的实现。

二、简单例子

在.NET Core中使用Redis进行事件订阅与发布非常简单。
下面是一个示例代码,演示了如何使用Redis进行事件的发布和订阅:

2.1、安装 NuGet 包

StackExchange.Redis

2.2、创建 Redis 连接

var redis = ConnectionMultiplexer.Connect("localhost");
var subscriber = redis.GetSubscriber();

2.3、发布事件

subscriber.Publish("channel", "message");

2.4、订阅事件

subscriber.Subscribe("channel", (channel, message) => {
    Console.WriteLine((string)message);
});

当有消息发布到指定的频道时,订阅者会接收到消息并执行指定的处理逻辑。

需要注意的是,这只是一个简单的示例,实际应用中可能需要考虑更多的情况,例如在后台运行订阅者、异常处理等等。
另外,你还可以使用模式匹配(通配符)来订阅多个频道。
有关更多高级用法和设置,请参考 StackExchange.Redis 的文档。

三、有序集合例子

在.NET Core中使用Redis进行事件订阅与发布时,如果你想要记录事件的发生情况,可以使用Redis的数据结构之一——有序集合(Sorted Set)来记录。

下面是一个示例代码,演示了如何使用有序集合来记录事件的发生情况:

3.1、安装 NuGet 包

StackExchange.Redis

3.2、创建 Redis 连接

var redis = ConnectionMultiplexer.Connect("localhost");
var db = redis.GetDatabase();
var subscriber = redis.GetSubscriber();

3.3、定义一个记录表的键

const string eventLogKey = "eventLog";

3.4、发布事件

string message = "message";
double timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
subscriber.Publish("channel", message);

// 记录事件到有序集合中,按照时间戳排序
db.SortedSetAdd(eventLogKey, message, timestamp);

3.5、订阅事件

subscriber.Subscribe("channel", (channel, message) => {
    Console.WriteLine((string)message);
    
    // 在事件发生时,更新有序集合中的时间戳
    double timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
    db.SortedSetAdd(eventLogKey, (string)message, timestamp);
});

通过使用有序集合,你可以在Redis中维护一个按照时间排序的事件记录表。
你可以根据需求使用SortedSet的各种操作,如根据时间范围获取事件记录、获取最新的事件等。

请注意,这只是一个基本示例,实际应用中可能需要考虑更多情况,如异常处理、清理过期事件等。
另外,建议根据实际的业务需求来优化记录表的结构和数据操作。
有关更多高级用法和设置,请参考 StackExchange.Redis 的文档。

四、结合Sql Server表

在.NET Core中使用Redis进行事件订阅与发布,并将事件信息添加到SQL Server数据库表中,你可以按照以下步骤进行操作:

4.1、安装 NuGet 包

StackExchange.Redis、Microsoft.Data.SqlClient

4.2、创建 Redis 连接和 SQL Server 连接

var redis = ConnectionMultiplexer.Connect("localhost");
var db = redis.GetDatabase();
var subscriber = redis.GetSubscriber();

string connectionString = "Your_SQL_Server_Connection_String";
using var connection = new SqlConnection(connectionString);

4.3、创建数据库表以存储事件信息

CREATE TABLE EventLog (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Channel NVARCHAR(100),
    Message NVARCHAR(MAX),
    Timestamp DATETIME
);

4.4、发布事件

string message = "message";
string channel = "channel";
DateTime timestamp = DateTime.UtcNow;

subscriber.Publish(channel, message);

// 添加事件信息到 SQL Server 数据库表中
string sql = @"INSERT INTO EventLog (Channel, Message, Timestamp)
               VALUES (@Channel, @Message, @Timestamp)";
connection.Execute(sql, new { Channel = channel, Message = message, Timestamp = timestamp });

4.5、订阅事件

subscriber.Subscribe("channel", (redisChannel, message) => {
    Console.WriteLine((string)message);
    
    // 添加事件信息到 SQL Server 数据库表中
    string sql = @"INSERT INTO EventLog (Channel, Message, Timestamp)
                   VALUES (@Channel, @Message, @Timestamp)";
    connection.Execute(sql, new { Channel = redisChannel, Message = (string)message, Timestamp = DateTime.UtcNow });
});

通过以上步骤,你可以在Redis中发布和订阅事件,同时将事件信息添加到SQL Server数据库表中存储。请根据你的实际需求进行适当的优化和异常处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离散性行业介绍及与MES系统的好处

离散型行业是指那些生产、制造或提供一种有形产品或明确定义的服务的行业,这些产品或服务通常可以分为离散的单位,而且它们的生产通常遵循一定的工序或流程。与连续型行业不同,离散型行业的生产过程通常是间断的,而不是连续的。 …

【ArcGIS Pro二次开发】(66):三调规程_土地利用现状分类面积汇总表

之前做了一个三调的土地利用现状分类统计表,是按照自己的习惯做的,发现不符合土规专业的要求,于是翻开三调规程,按规范重新制作。 一、要实现的功能 如上图所示,在【规划应用】组—【三调】面板下,点击【1、…

若依vue前端 报错error:0308010C:digital envelope routines::unsupported

第一步: 直接打开package.json 第二步: 直接替换scripts的内容为下面的内容 "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve","build:prod": "SET NODE_OPTIONS--openssl-leg…

【虹科案例】​使用虹科数字化仪测量遥远恒星的直径

加那利群岛拉帕尔马岛的 MAGIC 望远镜是为了观测发射高能伽马射线的宇宙物体(即超新星或黑洞)而建造的。天文学家使用双望远镜测量恒星的直径,以研究其整个生命周期的过程。对于地球上的望远镜来说,这是一项具有挑战性的任务&…

第二证券:5分钟k线图买卖技巧?

K线图是股票交易中最常用的技术剖析工具。而5分钟K线图则是其间的一种常见方式。那么如安在5分钟K线图上找到生意的时机呢?下面从几个视点剖析一下这个问题。 一、研讨商场趋势 在5分钟K线图上,商场走势的方向和力度非常重要。一般来说,假如…

尚硅谷大数据项目《在线教育之离线数仓》笔记008

视频地址:尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 P123 P124 P125 P126 P127 P128 P129 P123 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数…

网络安全实战对抗中的观察与思考

在本次攻防演练的过程中,绿盟科技M-SEC社区监测并确认了上百个漏洞在被积极利用,其中0day和1day漏洞的数量较往年有所提升,但nday漏洞依然是主力。 近日,一场行业瞩目的大型实战化网络安全攻防演练活动落下帷幕,在这场…

Hadoop之HDFS使用命令(常用)

本篇仅记载部分常用命令 若无所需命令可查看官方网站Apache Hadoop 3.3.6 – Overview 注:一切命令仅在启动HDFS集群后执行,否则会报错 注:仅在hadoop用户下操作 在Linux中超级用户是:root 但HDFS的超级用户是:启动n…

Gateway核心架构

1 Gateway核心架构 1.1 基本概念 路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息: id,路由标识符,区别于其他 Route。uri,路由指向的目的地 uri,即客户端请求最终…

EasyRecovery易恢复2023最新免费的电脑数据恢复软件

EasyRecovery是一款非常专业的硬盘数据恢复工具,EasyRecovery拥有磁盘诊断、数据恢复、文件修复、E-mail 修复等功能。有了EasyRecovery,你可以把误删,被破坏的文件,格式化的磁盘轻轻松松的找回来。小伙伴们可以使用EasyRecovery恢…

AWS EC2入门指南中创建和配置云虚拟机实例的基本步骤

文章目录 创建 AWS 账户登录 AWS 控制台导航到 EC2 控制台启动 EC2 实例选择 AMI(Amazon Machine Image)选择实例类型配置实例添加存储审查和启动实例创建密钥对 连接到 EC2 实例管理 EC2 实例了解定价和计费结论 🎈个人主页:程序…

预售33.8万元起:全新蔚来EC6开始接受预订,四驱标配 + 电动尾翼

蔚来汽车近日宣布,全新款EC6已经开始接受预订。从9月15日开始,广大消费者可以参与试驾活动,亲身体验这款定位为智能电动轿跑SUV的新车带来的魅力。据悉,这款车型将于9月16日开始交付,预售价格为33.8万元起,…

寻找联想集团的AI预期差

股票市场中最重要的因素是什么?不是技术分析,也不是基本面分析,而是预期差。 当下的市场,是复杂与困难的,想要在迷雾中看清方向,就要寻找更高的确定性,以及更大的预期差。 今天能大家分享一下联…

【Arduino29】74HC595控制LED灯

硬件准备 74HC595直插芯片:1 个 绿色LED灯:4 个 红色LED灯:4 个 220欧的电阻:8个 面包板:1个 杜邦线:若干 硬件连线 软件程序 #define DS_pin 11 //DS引脚 #define STCP_pin 8 //ST_CP引脚,输出…

海学会读《乡村振兴战略下传统村落文化旅游设计》2023年度许少辉八一新书

海学会读《乡村振兴战略下传统村落文化旅游设计》2023年度许少辉八一新书

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率,简化操作流程,并进行更多的自定义配置和控制。同时&#xff0c…

Docker的开源容器镜像仓库Harbor安装

概述 Docker Hub是Docker官方提供的在线Docker镜像注册中心,其支持Docker镜像的查询(search)、提交(push)以及获取(pull)。目前,在云原生领域中,CNCF提供Harbor开源版本…

影刀-验证码识别

打开慕课主界面为例子

自己编译静态ffmpeg freetype2 not found问题解决

整理好依赖的ffmpeg仓库地址: https://github.com/pyke369/sffmpeg 报错:ERROR: freetype2 not found using pkg-config 网上查询说是需要安装freetype-devel ​​​​​​​sudo apt install libfreetype6-dev 安装后还是报一样的错,实…

window 添加/删除系统右键菜单项

一、添加文件夹右键菜单项 1.打开Windows注册表编辑器。按下WinR组合键,输入regedit,点击确定。 2.在注册表中,找到以下路径: HKEY_CLASSES_ROOT\Directory\shell 3. 参考其他菜单项进行添加,例如添加WebStorm的菜…