redis发布订阅

角色

  1. 发布者 publisher
  2. 订阅者 subscriber
  3. 通道 channel

发布订阅模型

API

订阅

发布:
   publish channel msg ;

127.0.0.1:6379> publish A:B 'l am lili'
(integer) 1

返回结果为订阅者数量n
订阅:
subscriber channel

127.0.0.1:6379> SUBSCRIBE A:B
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "A:B"
3) (integer) 1
1) "message"
2) "A:B"
3) "111"
1) "message"
2) "A:B"
3) "l am lili"

接收订阅的频道的消息,但值得注意的是当前发布订阅模式没有消息堆积功能,订阅频道的客户端不能获取订阅前的消息
取消订阅
redis 127.0.0.1:6379> UNSUBSCRIBE channel [channel ...]

127.0.0.1:6379> UNSUBSCRIBE A:B
1) "unsubscribe"
2) "A:B"
3) (integer) 0

在客户端执行SUBSCRIBE命令时,redis将所有频道的订阅关系保存在pubsub channel字典里,key是频道的名称,值是一个链表,所有客户端信息以链表存储。

模式匹配

订阅模式
客户端可以订阅全风格的模式以便接收所有来自能匹配到给定模式的频道的消息,支持多通配符

PSUBSCRIBE pattern [pattern ...] 

退订模式
将取消订阅匹配该模式的客户端,这个调用不影响其他订阅

PUNSUBSCRIBE [pattern [pattern ...]] 

在这里插入图片描述
在模式订阅里服务器也将所有模式的订阅关系都保存在服务器状态的pubsub_patterns属性里面。pubsub_patterns是一个链表,每一个节点是一个pubsubPattern,里面有两个属性,pattern记录了被订阅的模式,client属性记录了订阅模式的客户端。

如果你使用redis-cli命令行客户端测试的话,只能通过ctrl+c退订频道和模式,暂时未找打能用命令退订的方式。在这里插入图片描述

PUBSUB

列出至少一个订阅者的频道

127.0.0.1:6379> PUBSUB CHANNELS
1) "redischat

列出频道内订阅者数量

PUBSUB numsub [channel]

127.0.0.1:6379> PUBSUB numsub A:B
1) "A:B"
2) (integer) 1

服务器被订阅模式的数量。

#客户端1
127.0.0.1:6380> PSUBSCRIBE A:*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "A:*"
3) (integer) 1
#客户端2
127.0.0.1:6380> PSUBSCRIBE A:* B:*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "A:*"
3) (integer) 1
1) "psubscribe"
2) "B:*"
3) (integer) 2
#客户端3
127.0.0.1:6380> PUBSUB numpat
(integer) 3

消息队列

队列使用list实现,队列是FIFO先进先出,刚好利用 lpush+rpop,命令实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值