发布订阅

特性

原理:redis-server 维护了一个字典,字典的键就是频道,值则是链表(链表存储订阅该频道的所有客户端)

订阅操作会往字典中 新增 频道-订阅者链表 键值对 或 更新 频道这个键对应的链表值

发布操作会 在字典中查找频道,遍历对应的订阅者链表 发送消息

常见用途:消息队列,网络聊天室,订阅通知

对于复杂场景要借助消息中间件,例如RabbitMQ,Kafka或RocketMQ等

SUBSCRIBE|PSUBSCRIBE|PUBLISH

# 注意:先订阅再发布,不然会错过订阅前发布的消息

# 订阅者1
127.0.0.1:6379> SUBSCRIBE ch1 ch2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ch1"
3) (integer) 1
1) "subscribe"
2) "ch2"
3) (integer) 2
# 订阅者2
127.0.0.1:6379> SUBSCRIBE ch1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ch1"
3) (integer) 1
# 发布者
127.0.0.1:6379[10]> PUBLISH ch1 "hello ch1"
(integer) 2
127.0.0.1:6379[10]> PUBLISH ch2 "hello ch2"
(integer) 1
# 订阅者1
1) "message"
2) "ch1"
3) "hello ch1"
1) "message"
2) "ch2"
3) "hello ch2"
# 订阅者2
1) "message"
2) "ch1"
3) "hello ch1"

# UNSUBSCRIBE 该命令有设计缺陷,一旦进入订阅模式后就无法再执行命令,而要退出订阅模式只能CTRL+C,此时连客户端一并退出了,客户端一退出,所有订阅都失效(即使再次进入),因此,取消订阅相关的操作都不能执行
# 起码客户端之际进行退订操作是不可行的!!!

# 同理
# 模式支持 glob 风格的正则表达式。
# 每个模式以 * 作为匹配符。
# it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等)
# news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。
PSUBSCRIBE pattern [pattern ...]
# 同样客户端不可用
PUNSUBSCRIBE

其他命令

PUBSUB

#redis#
Redis 文章被收录于专栏

此专栏由于更新观看不便,不会保持及时更新,最新更新见计算机合集专栏https://www.nowcoder.com/creation/manager/columnDetail/04yp33

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-25 16:04
起床了的斜杠青年不想当二面王:还在等
点赞 评论 收藏
分享
Jolteon:字节不要官网投,****投随便约面
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务