【赵强老师】Redis的消息发布与订阅
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Redis 作为一个publish/subscribe server,起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型
千家信息网最后更新 2026年11月01日【赵强老师】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安全错误
数据库的锁怎样保障安全
咖啡
互联网金融科技
今日互联网科技
贷财互联网科技
小马过河互联网科技
百单互联网科技有限公司
伴你行互联网科技有限公司
湖南洣水互联网科技有限公司扣款
北京三清互联网科技
广州优美互联网科技
语蝶互联网科技有限公司
互联网科技与大数据专业
东莞新华互联网科技学校
小米互联网科技园入驻
2021世界互联网领先科技成果发布
山东大美朱楼互联网科技有限公司
马化腾互联网科技教学
互联网领先科技成果宣传视频
广东猫王互联网科技有限公司电话
科技美学互联网 艺术
云信互联网科技有限公司
重庆互联网络科技
唐信互联网科技
无线互联网科技
世界互联网科技公司市值排名
赶超互联网科技 微信多开
合肥互联网科技公司公章图片
南通创西澳互联网科技有限公司
上海乐五互联网科技有限公司
武汉亿视互联网科技有限公司