Redis--发布订阅&事务

文章目录

目录

文章目录

前言

一、发布的订阅

二、事务


前言

主要介绍了redis的发布的订阅功能和事务功能。


一、发布的订阅

  • 客户端订阅频道/模式
    • 数据结构
      • 频道
        • 在redisServer结构里面通过pubsub-channels字典保存订阅服务器频道的客户端相关信息
        • pubsub-channels.key=频道
        • pubsub-cahnnels.value=订阅该频道的客户端组成的链表
      • 模式
        • redisServer的pubsub-patterns链表保存订阅服务器模式的客户端相关信息
        • 每个链表节点pubsubPattern通过client属性存客户端和pattern属性存客户端订阅的模式
    • 订阅/退订频道
      • SUBSCRIBE
        • 如果之前已经有某个客户端订阅该频道,则在pubsub-channels里通过频道key找到客户端values链表,并在尾部加入新的客户端
        • 如果没有订阅过该频道,则在pubsub-channels里创建一个新的频道key,并且将客户端加入客户端链表value中
      • SUBSCRIBE
        • 通过频道key在pubsub-channels字典里找到客户端链表values,删除客户端节点
        • 如果删除后,该频道没有任何订阅者,则删除该频道-客户端键值对
    • 订阅/退订模式
      • PSUBSCRIBE
        • 创建一个pubsubPattern结构,client属性存客户端,pattern属性存订阅的模式
        • 将pubsubPattern结构加入到pubsub-partterns链表尾部
      • UNPSUBSRIBE
        • 找到对应的pubsubPatterns结构并从pubsub-patterns链表删除即可
  • 客户端向频道发布信息
    也就是想向订阅该频道的客户端发送命令,通过向服务器发送PUBLISH命令,然后服务器找到订阅频道的客户端,然后再相这些客户端发送命令
    • PUBLISH向某个频道/模式发送message消息
    • 频道:从pubsub-channels里找到频道key对应的订阅者客户端链表values,遍历这个链表向他们发送message消息,如果这个频道与某个模式相关联,会再根据频道关联的pattern去pubsub-patterns里找到对应的pubsubPattern,向其中client属性指定的客户端发送message信息
    • 模式:根据模式pattern从pubsub-patterns里找到pubsubPattern,向其中client属性指定的客户端发送message信息
  • 客户端通过PUBSUB命令查看服务器订阅信息
    • PUBSUB CHANNELS (pattern):返回服务器中被订阅的所有频道,或者与pattern模式向关联的被订阅的频道
    • PUBSUB NUMSUB (channel-1,channel-2,...):返回频道channel-1,channel-2,...的订阅者客户端数量
    • PUBSUB NUMPAT:返回服务器被订阅的模式数量

二、事务

  • 事务执行过程
    • MULTI开始事务
    • 命令入队
      • 让一个错误命令入队,所有命令无法正常执行
      • 让一个正确的但是无法正常执行的命令入队,该命令会执行失败。但是队列中的其他命令可以正常执行
    • EXEC顺序执行事务队列中的命令
      • 在执行EXEC时,客户端会先检查自己的CAS标识有没有被打开,被打开则不能执行命令
  • WATCH
    • 服务器维持一个watch字典记录客户端对服务器键值的监视状态,key是数据库键,value是监视该键的客户端组成的链表
    • 某个客户端对服务器发布一个修改数据库键值的写命令后,服务器会检查watch字典,看看有没有客户端监视该键,如果有会打开这些客户端的CAS标识,表示事物一致性被破坏
  • ACID
    • 部分原子性:没有回滚策略,队列中某个命令执行报错不会影响其他命令的正确执行(但是如果入队的命令就是一个错误命令,这个事务会整体执行失败)
    • 一致性、隔离性
    • 限定情况的持久性:只有在AOF持久化策略,appendsync选项配置为alway且没有打开rewriteaof时停止同步标识时,才有持久性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值