Java中用Redis实现消息广播的核心是Pub/Sub机制:PUBLISH发消息、SUBSCRIBE收消息,支持多频道订阅与通配符匹配;但无持久化和确认机制,需结合Redis Stream等保障可靠性。

Java 中用 Redis 实现消息广播,核心就是利用它的发布/订阅(Pub/Sub)机制——发布者把消息发到某个频道,所有订阅该频道的客户端都能实时收到,天然支持一对多广播。
Redis 发布订阅的基本命令和角色
广播依赖两个基础命令:PUBLISH(发消息)和 SUBSCRIBE(收消息)。频道(channel)是中间媒介,发布者和订阅者互不感知,完全解耦。一个订阅者可同时监听多个频道,一个发布者也能向多个频道发送同一条消息。
- PUBLISH channel_name "message":向指定频道推送字符串消息
- SUBSCRIBE channel1 channel2:一次性订阅多个频道
-
PSUBSCRIBE pattern*:支持通配符匹配,比如
PSUBSCRIBE log.*可接收log.error、log.info - UNSUBSCRIBE 或 PUNSUBSCRIBE:主动退出监听
用 Jedis 实现最简广播示例
引入 jedis 依赖后,几行代码就能跑通:
- 订阅端:创建
JedisPubSub子类,重写onMessage处理收到的消息;调用jedis.subscribe(subscriber, "broadcast")开始监听 - 发布端:直接用
jedis.publish("broadcast", "系统维护中"),所有正在订阅broadcast的客户端立刻收到 - 注意:
subscribe()是阻塞方法,需单独线程运行,否则后续代码不会执行
在 Spring Boot 中接入更稳定可靠
生产环境推荐用 Spring Data Redis 封装好的消息监听容器:
立即学习“Java免费学习笔记(深入)”;
- 配置
RedisMessageListenerContainer,注册多个MessageListenerAdapter - 每个适配器绑定一个具体监听器类(如
NoticeListener),并指定反序列化方式(推荐RedisSerializer.json()) - 监听器实现
onMessage(Message message, byte[] pattern),从message.getBody()解析内容 - 支持按
PatternTopic订阅,比如new PatternTopic("user.*")匹配所有用户相关事件
广播场景下的关键注意事项
Pub/Sub 不是消息队列,它没有持久化、无确认机制、不保证送达:
- 消息只推给当前在线的订阅者;服务重启或网络断开期间的消息会丢失
- 若需“至少一次”投递,应搭配 Redis Stream 或 Kafka 等有持久能力的组件
- 高频广播时避免单频道过载,可按业务维度拆分频道(如
order.created、order.updated) - 测试阶段建议先用 redis-cli 手动
SUBSCRIBE和PUBLISH验证频道通路是否正常


















