springboot redis 发布与订阅
发布与订阅
Redis的发布与订阅功能可以让客户端通过广播方式,将消息(message)同时发送给可能存在的多个客户端,并且发送消息的客户端不需要知道接收消息的客户端的具体信息。
在Redis中,客户端可以通过订阅特定的频道(channel)来接收发送至该频道的消息,我们把这些订阅频道的客户端称为订阅者(subscriber)。一个频道可以有任意多个订阅者,而一个订阅者也可以同时订阅任意多个频道。除此之外,客户端还可以通过向频道发送消息的方式,将消息发送给频道的所有订阅者,我们把这些发送消息的客户端称为发送者(publisher)。
指令
优缺点
优点:支持发布订阅,支持多组生产者、消费者处理消息
缺点:
- 消费者下线数据会丢失
- 不支持数据持久化,Redis宕机则数据也会丢失
- 消息堆积,缓存区溢出,消费者会被强制踢下线,数据也会丢失
SpringBoot集成Redis发布与订阅
自定义RedisSubConfig
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Configuration public class RedisSubConfig { @Bean public RedisMessageListenerContainer container(RedisConnectionFactory factory, RedisMessageListener listener) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(factory); //订阅频道 这个container 可以添加多个 messageListener container.addMessageListener(listener, new ChannelTopic( "channel_demo" )); //container.addMessageListener(listener, new ChannelTopic("redis.news")); return container; } @Bean public StringRedisSerializer stringRedisSerializer() { return new StringRedisSerializer(); } } |
自定义消息监听器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Slf4j @Component public class RedisMessageListener implements MessageListener { @Resource private StringRedisSerializer stringRedisSerializer; @Override public void onMessage(Message message, byte [] pattern) { String channel = stringRedisSerializer.deserialize(message.getChannel()); String body = stringRedisSerializer.deserialize(message.getBody()); log.info( "消费Redis消息\n channel:{}\n body:{}" , channel, body); } } |
RedisPubController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @RestController @RequestMapping ( "/redis" ) public class RedisPubController { @Resource private StringRedisTemplate stringRedisTemplate; @GetMapping ( "/PUBLISH" ) public String getUserById(String message) { stringRedisTemplate.convertAndSend( "channel_demo" , message); return "message:" + message; } } |
分类:
数据库 / Redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-03-08 钉钉 回调事件 消息加解密