Redis 消息发布与订阅

本文介绍了Redis中的消息发布与订阅功能,包括推模式和拉模式。推模式下,客户端订阅channel后,通过PUBLISH接收消息,而拉模式中,订阅者主动从邮箱中获取消息。两种模式各有优缺点,推模式可能导致消息丢失,而拉模式允许客户端非阻塞操作。文章详细阐述了两种模式的数据结构和操作逻辑。
摘要由CSDN通过智能技术生成
推模式

客户端使用SUBSCRIBE命令订阅一个channel(会被阻塞),其他的客户端可以使用PUBLISH命令向这个channel发送消息,所有订阅者都会收到这个消息。

推模式每一个channel维护一个客户端列表,发送消息的时候遍历列表发送。其余订阅,取消订阅,模式匹配订阅等实现也都很简单

例子:

subscriber:

subscribe test

publisher:

publish test "hello world"

subscriber:

1) "message"
2) "test"
3) "hello world"
拉模式

推模式要求订阅者都阻塞在channel上,当有消息发送到channel上后,所有订阅者都收到消息。另外,如果客户端断掉连接则自动退出订阅,断开的连接可能造成消息丢失。

与之对应拉模式。发送者将消息放到一个邮箱中,所有订阅的这个邮箱的客户端可以在任意时刻去收取。保证所有客户端都收取完成的邮件才删除。

拉模式不需要客户端阻塞。

拉模式需要3种数据结构,邮箱,订阅者,订阅管理员,都是有序列表。还有一个自增计数器。

  • 邮箱的KEY是邮箱名字,有序列表保存消息,序是消息ID。
  • 订阅者的KEY是订阅者名字,有序列表保存订阅者订阅的邮箱,序是这个订阅者在该邮箱读到的消息ID。
  • 每一个邮箱有一个订阅管理员,KEY是和邮箱名字
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值