Redis订阅发布
Redis订阅发布
什么是订阅发布及其使用场景?
Redis订阅发布是一种消息通信模式;发布者(publish)发布消息,订阅者(subscribe)接收消息;Redis客户端可以订阅任意数量的频道
图解原理
订阅频道的三个客户端及其订阅的频道间的关系
消息发送时:数据在通道及订阅通道客户端间的传输
使用示例
- 订阅频道
127.0.0.1:6379> subscribe ohmydream # 订阅ohmydrean频道,之后一直监听
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ohmydream"
3) (integer) 1
- 另一个客户端向频道写数据
127.0.0.1:6379[3]> publish ohmydream hello,world
(integer) 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会为每一个订阅者分配一个缓冲区,当有消息从生产者发布时,消息会先被写入对应的消费者的缓冲区,之后消费者不断从缓冲区读取消息,处理消息。这会导致当消费者消费数据比较慢的时候,缓冲区会堆积大量数据,缓冲区内存持续增长。
优缺点
优点:支持发布订阅,支持多组生产者、消费者处理消息
缺点:
- 消费者下线数据会丢失
- 不支持数据持久化,Redis宕机则数据也会丢失
- 消息堆积,缓存区溢出,消费者会被强制踢下线,数据也会丢失
小结
redis的发布/订阅模式适用于对数据的完整性要求不高的场景,在实际使用中用的比较少,只有哨兵集群和Redis实例通信时,采用了Pub/Sub的方案,因为哨兵正好符合即时通讯的业务场景