来源:http://www.hxstrive.com/article/503.htm
Redis不仅仅是Key-Value数据库,而且也提供发布/订阅功能。发布订阅分为两种方式,一种是直接订阅频道,即用户订阅到一个频道名,那么发给该频道名的消息将推送给订阅者。另一种方式是采用正则匹配的方式。在实现中,发送者不是将信息直接发送给特定的接收者,而是将信息发送给频道,然后由频道将信息转发给所有对这个频道感兴趣的订阅者。
发送者无须知道任何关于订阅者的信息,而订阅者也无须知道是那个客户端给它发送信息,它只要关注自己感兴趣的频道即可。对发布者和订阅者进行解构,可以极大地提高系统的扩展性。
图:订阅管道
比如说,要订阅频道 finance 和 it,客户端可以使用频道名字作为参数来调用 subscribe命令:
1
|
redis> subscribe finance it |
当有客户端发送信息到这些频道时,Redis会将传入的信息推送到所有订阅这些频道的客户端里面。
推送信息格式
频道转发的每条信息都是一条带有三个元素的多条信息。信息的第一个元素标识了信息的类型,可选值如下:
subscribe
表示当前客户端成功地订阅了信息,第二个元素表所订阅的频道名称,第三个元素则记录了目前客户端已订阅频道的总数。
1
2
3
4
5
6
7
8
|
127.0.0.1:6379> subscribe finance it Reading messages... (press Ctrl-C to quit) 1) "subscribe" # 订阅第一个频道
2) "finance" # 频道名称
3) (integer) 1 # 频道总数
1) "subscribe" # 订阅第二个频道
2) "it"
3) (integer) 2 |
unsubscribe
表示当前客户端成功地退订了信息,第二个元素表示退订的频道名称,第三个元素记录了客户端目前仍在订阅的频道数量。当客户端订阅的频道数量降为0时,客户端不再订阅任何频道,它可以像往常一样,执行任何Redis命令。
message
表示这条信息是由某个客户端执行publish命令所发送的消息, 即真正的信息。信息的第二个元素是信息来源的频道,而第三个元素则是信息的内容。
1
2
3
|
1) "message" # 表示消息
2) "it" # 频道名称
3) "hello" # 消息内容
|
实例1:订阅两个频道,然后发送信息到频道。
第一步:订阅first和second频道,如下:
第二步:发布消息到second频道,如下:
那么之前订阅了second频道的客户端将收到以下信息:
实例2:订阅者退订所有已经订阅了的频道。
1
2
3
4
5
6
7
8
|
redis> unsubscribe # 退订订阅频道
1) "unsubscribe"
2) "second"
3) (integer) 1 1) "unsubscribe"
2) "first"
3) (integer) 0 |
订阅模式
Redis的发布与订阅实现支持模式匹配:客户端可以订阅一个带 * 号的模式,如果某个/某些频道的名字和这个模式匹配,那么当有信息发送给这个/这些频道的时候,客户端也会收到这个/这些频道的信息。比如说:
执行上面命令的客户端将收到news.cup、news.it等频道的信息。客户端订阅的模式里面可以包含多个glob风格的通配符,比如*、?和[...]等。
执行下面命令将退订news.*模式,其他已订阅的模式不会被影响。如下:
1
|
redis> punsubscribe news.* |
订阅模式与订阅频道接收到的信息格式不太一样,实例如下:
第一步:监听“news.*”匹配模式,如下图:
第二步:发布一个消息到“news.com”频道,消息内容为“hello”。如下图:
接受到的信息如下:
其中:
1) “pmessage” 通过订阅模式接收到的信息的类型为pmessage。这代表有某个客户端通过 publish 向某个频道发送了信息, 而这个频道刚好匹配了当前客户端所订阅的某个模式。
2) “news.*” 被匹配的模式。
3) “news.com” 被匹配的频道的名字。
4) “hello” 消息的实际内容。
相关推荐
综上所述,C# Redis发布订阅Demo涵盖了Redis Pub/Sub机制的使用以及Key过期通知的处理。通过这个Demo,开发者可以学习到如何在C#应用中利用Redis进行实时数据通信和监控,这对于构建分布式系统和实时应用非常有价值...
在这个“redis发布订阅小案例”中,我们将探讨如何使用Java来实现Redis的发布订阅功能。首先,我们需要引入Jedis库,这是Java操作Redis的常用客户端库。确保在项目中已经添加了Jedis的依赖,例如通过Maven或Gradle。...
在本文中,我们将深入探讨如何使用.NET Core 3.0框架与Redis进行发布/订阅(Pub/Sub)通信。Redis是一个高性能的键值存储系统,它提供了丰富的数据结构,如字符串、哈希表、集合和有序集合。在.NET Core 3.0中,我们...
标题"Redis发布订阅.net实现"所涉及的关键知识点包括: 1. Redis的发布订阅机制: 发布订阅模式在Redis中由`PUBLISH`和`SUBSCRIBE`命令支持。发布者通过`PUBLISH`命令将消息发送到一个特定的频道,而订阅者则通过`...
**Redis发布订阅模式详解** Redis 是一款高性能的键值存储系统,它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。在实际应用中,Redis 不仅可以作为缓存服务,还提供了丰富的消息通信机制,其中之一...
可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于nuduo库实现 使用了redis发布订阅消息队列 数据库采用MySQL 可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码 基于nuduo库实现 ...
基于Java环境下的Redis发布订阅设计与实现 本文研究了基于Java环境下的Redis发布订阅设计与实现,以满足实时聊天系统、微博以及分布式架构等应用对数据通信中间件的需求。Redis的发布订阅功能可以实现实时通信、...
本项目提供了一个基于C#的Redis发布与订阅(Publish/Subscribe)系统的源码,帮助开发者了解如何在Windows Forms(Winform)应用中实现这一功能。 首先,我们需要了解Redis的发布/订阅模式。在这个模式下,发送者...
在探讨.NET Core如何使用Redis进行发布订阅之前,首先需要了解Redis发布订阅的基本概念。Redis的发布订阅(pub/sub)是一种消息通信模式,它包括发布者(publisher)和订阅者(subscriber)。发布者负责发布消息,而...
该项目是dtalk(Device Talk)前端设备控制框架,基于Redis 发布订阅(pub/sub)机制设计,源码包含270个文件,涵盖119个Java源文件、61个PNG图片文件、21个Shell脚本文件、20个批处理文件、8个XML配置文件、7个属性文件...
基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)。在基于物联网的应用中,各种前端设备需要能被远程管理,当所有的设备都能直接通过ip地址访问时,设计设备管理系统时,只需要把前端设备当作一个简单的...
在本文中,我们将深入探讨如何使用Qt框架结合hiredis-1.0.0库来实现Redis的订阅发布功能。Redis是一种高性能的键值存储系统,广泛用于数据缓存、消息队列以及实时数据处理等领域。Qt则是一个跨平台的应用程序开发...
本案例包含redis的发布订阅功能,以及dotnet core+SignalR实现的简单即时通信,并提供文档笔记。本案例初衷是想结合redis的发布订阅功能+websocket实现消息客户端页面订阅指定的消息,并在客户端页面进行显示;
python 19、REDIS基础 2-1_Redis发布订阅_Day02_am.mp4
本话题主要探讨如何利用SpringBoot和Redis实现事件的发布订阅功能,这对于实现分布式系统中的异步通信和解耦至关重要。 首先,我们需要理解SpringBoot的核心特性。SpringBoot是Spring框架的一个简化版本,它旨在...
第11周-第14章节-Python3.5-Redis 发布订阅及本节作业.mp4
在 Redis 中,订阅与发布(Pub/Sub)是一种消息通信模式,用于实现实时的消息传递。在这个模式下,发布者将消息发送到特定的频道,而订阅者则可以监听并接收这些频道上的消息。这种机制无需直接交互,而是通过中间的...
Redis 发布订阅(pub/sub)是 Redis 数据库中一种基于发布-订阅模式的消息通信机制,它允许应用程序通过发送和接收消息来实现不同组件之间的异步通信。在这个模式中,发送者(publisher)向特定的频道(channel)...
发布订阅在设计模式中可以类比为观察者模式,它解决了对象之间一对多依赖关系的问题。当发布者(Publisher)向一个频道(Channel)发布消息时,所有订阅了该频道的订阅者(Subscriber)都会收到这个消息。 Redis...
在这一模式下,Redis服务器作为消息的中间人,允许多个客户端(订阅者)订阅特定的主题,当有发布者向该主题发布消息时,所有订阅了该主题的客户端都会收到消息。这种模式提供了一种轻量级的通信方式,适合实时通知...