Redis订阅发布

Redis订阅发布

什么是订阅发布及其使用场景?

Redis订阅发布是一种消息通信模式;发布者(publish)发布消息,订阅者(subscribe)接收消息;Redis客户端可以订阅任意数量的频道

图解原理

订阅频道的三个客户端及其订阅的频道间的关系

img

消息发送时:数据在通道及订阅通道客户端间的传输

img

使用示例

  1. 订阅频道
127.0.0.1:6379> subscribe ohmydream # 订阅ohmydrean频道,之后一直监听
Reading messages... (press Ctrl-C to quit) 
1) "subscribe"
2) "ohmydream"
3) (integer) 1

  1. 另一个客户端向频道写数据
127.0.0.1:6379[3]> publish ohmydream hello,world
(integer) 1
  1. 第一个客户端收到消息
127.0.0.1:6379> subscribe ohmydream
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ohmydream"
3) (integer) 1
1) "message"
2) "ohmydream"
3) "hello,world"

其他命令

序号 命令及描述
1 [PSUBSCRIBE pattern pattern ...] 订阅一个或多个符合给定模式的频道。
2 [PUBSUB subcommand argument [argument ...]] 查看订阅与发布系统状态。
3 PUBLISH channel message 将信息发送到指定的频道。
4 [PUNSUBSCRIBE pattern [pattern ...]] 退订所有给定模式的频道。
5 [SUBSCRIBE channel channel ...] 订阅给定的一个或多个频道的信息。
6 [UNSUBSCRIBE channel [channel ...]] 指退订给定的频道。

相关配置

client-output-buffer-limit pubsub 32mb 8mb 60

缓冲区一旦超过32mb, Redis直接强制把消费者踢下线

8mb+60:缓冲区持续60s大于8m,也会把消费者踢下线

缓冲区概念:redis会为每一个订阅者分配一个缓冲区,当有消息从生产者发布时,消息会先被写入对应的消费者的缓冲区,之后消费者不断从缓冲区读取消息,处理消息。这会导致当消费者消费数据比较慢的时候,缓冲区会堆积大量数据,缓冲区内存持续增长。

优缺点

优点:支持发布订阅,支持多组生产者、消费者处理消息

缺点:

  1. 消费者下线数据会丢失
  2. 不支持数据持久化,Redis宕机则数据也会丢失
  3. 消息堆积,缓存区溢出,消费者会被强制踢下线,数据也会丢失

小结

redis的发布/订阅模式适用于对数据的完整性要求不高的场景,在实际使用中用的比较少,只有哨兵集群和Redis实例通信时,采用了Pub/Sub的方案,因为哨兵正好符合即时通讯的业务场景

posted @ 2022-03-23 15:01  Oh,mydream!  阅读(139)  评论(0编辑  收藏  举报