【赵强老师】Redis的消息发布与订阅
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,Redis 作为一个publish/subscribe server,起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型
千家信息网最后更新 2025年11月07日【赵强老师】Redis的消息发布与订阅
Redis 作为一个publish/subscribe server,起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型,当发布者通过publish命令向Redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。
下图为大家展示了Redis消息机制的体系架构。
发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。
下面列出来了Redis发布消息、订阅消息的相关命令。
publish:发送消息:Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。 subscribe:订阅某个频道:Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道。 psubscribe:模式匹配:模式匹配功能允许客户端订阅符合某个模式的频道,Redis采用PSUBSCRIBE订阅符合某个模式所有频道,用""表示模式,""可以被任意值代替。
案例一:一个消息生产者,两个消息消费者

案例二:两个消息生产者,一个消息消费者
案例三:Redis消息机制的Java API
添加依赖:
消息监听器类:
import redis.clients.jedis.JedisPubSub;public class RedisMsgPubSubListener extends JedisPubSub { @Override public void unsubscribe() { super.unsubscribe(); } @Override public void unsubscribe(String... channels) { super.unsubscribe(channels); } @Override public void subscribe(String... channels) { super.subscribe(channels); } @Override public void psubscribe(String... patterns) { super.psubscribe(patterns); } @Override public void punsubscribe() { super.punsubscribe(); } @Override public void punsubscribe(String... patterns) { super.punsubscribe(patterns); } @Override public void onMessage(String channel, String message) { System.out.println("channel:" + channel + "receives message :" + message); this.unsubscribe(); } @Override public void onPMessage(String pattern, String channel, String message) { } @Override public void onSubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels); } @Override public void onPUnsubscribe(String pattern, int subscribedChannels) { } @Override public void onPSubscribe(String pattern, int subscribedChannels) { } @Override public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels); }}测试程序:
package demo.redis;import redis.clients.jedis.Jedis;public class TestMain { @Test public void testSubscribe() throws Exception{ Jedis jedis = new Jedis("localhost"); RedisMsgPubSubListener listener = new RedisMsgPubSubListener(); jedis.subscribe(listener, "redisChatTest"); //other code } @Test public void testPublish() throws Exception{ Jedis jedis = new Jedis("localhost"); jedis.publish("redisChatTest", "Hello World"); Thread.sleep(5000); jedis.publish("redisChatTest", "Hello Redis"); }}
消息
订阅
频道
命令
模式
订阅者
发布者
客户
客户端
机制
案例
类型
两个
主题
功能
多个
数量
消费者
生产者
消费
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术服务中心怎么注册
软件开发助理工程师干什么
关于深度神经网络技术的报告
定制网络技术开发价值
网民网络安全事件
硬件的软件开发
服务器动态ip对seo的影响
软件开发答辩题目及答案
运城网络技术团队
互联网科技园总部
网络安全线上展厅
江苏软件开发技术服务公司
王者ios服务器99区
信息化管理软件开发工程师
关于网络安全简单海报
绝地求生未来之翼服务器为啥维护
查看服务器端口是否在启用
铭时代网络技术
语音对讲软件开发信息
富阳区app软件开发团队
软件开发进度表 文档
国家网络安全 保护制度
大学生与网络安全研究成果
服务器系统部署后要做什么
职中网络安全班课
网络安全事件统计与分析
如何通过服务器访问其他网站
云服务器研发时间
三一集团面试软件开发
黄浦区营销网络技术包括什么