你还不懂Redis的发布订阅模式呢?

一、什么是发布订阅

其实就是MQ,被订阅者写消息,订阅者们实时读到消息进行处理。

二、Redis里的发布订阅

在说这之前,前面提到的list类型blpop也是可以模拟单播阻塞队列的。但是他终归是模拟。Redis为我们提供了属于他自己的发布订阅。核心命令:
在这里插入图片描述

三、实操

1、说明

只有已订阅的客户端才能收到消息,比如我给test发送了一条helloworld,他会发给当前所有订阅test的客户端推送helloworld这条消息,后来的客户端再去订阅test,也不会收到这个历史消息。

2、代码

# 客户端1给test发送hello
127.0.0.1:6379> PUBLISH test helloworld
(integer) 0

# 这时候启动client2去订阅test,结果发现不会输出任何内容,也就是历史的helloworld我不会收到
127.0.0.1:6379> SUBSCRIBE test
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test"
3) (integer) 1

# 这时候我在去客户端1给test这个channel发送hello
127.0.0.1:6379> PUBLISH test hello
(integer) 1

# 切换到client2,发现收到了hello这条消息
1) "message"
2) "test"
3) "hello"

四、需求

1、需求描述

比如微信,它可以看历史时间的聊天记录,然后发消息能及时收到。

2、实现原理图

2.1、文字

  • 实时聊天采取Redis的发布订阅模式,发完消息订阅者收到消息写sorted_set以及db
  • 历史消息根据调研一般用户只查看3天内的居多,3天后的数据很少翻阅,所以将3天内的消息放到sorted_set里,3天后的去db里查
  • 为什么用zset处理历史消息,因为zset可以排序,历史消息肯定需要按照时间排序,时间作为score。

2.2、图解

在这里插入图片描述

五、总结

  • 发布订阅概念
  • redis的blpop模拟单播阻塞队列
  • redis的发布订阅
  • 利用发布订阅完成需求

六、个人公众号

微信公众号【Java码农社区】
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【原】编程界的小学生

没有打赏我依然会坚持。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值