Redis:发布订阅
前言
SUBSCRIBE、UNSUBSCRIBE和PUBLISH 三个命令实现了发布与订阅信息泛型(Publish/Subscribe messaging paradigm),在这个实现中, 发送者(发送信息的客户端)将信息发送给频道(channel), 然后由频道将信息转发给所有对这个频道感兴趣的订阅者。
Redis 发布订阅
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
channels:实际上就是一个key-value的Map结构,key为订阅地频道,value为Client的List
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
指令
订阅指令
订阅频道名为redisChat
SUBSCRIBE redisChat
发布指令
在另一个客户端向redisChat频道发送消息
PUBLISH redisChat “Redis is a great caching technique”
退订频道
UNSUBSCRIBE redisChat
订阅指定模式频道
Redis Psubscribe 命令订阅一个或多个符合给定模式的频道。
每个模式以 作为匹配符,比如 a 匹配所有以 a 开头的频道( aa 、 ab 、 ac 等等)。
PSUBSCRIBE a*
退订所有给定模式的频道
PUNSUBSCRIBE a*
原理
RedisServer包含两个重要的结构:
- channels:实际上就是一个key-value的Map结构,key为订阅地频道,value为Client的List
- patterns:存放模式+client地址的列表
流程:从pubsub_channels中找出跟publish中channel相符的clients-list,然后再去pubsub_patterns中找出每一个相符的pattern和client。向这些客户端发送publish的消息。