Redis(03)——发布订阅

基础命令


基于频道

  1. publish channel message:将信号发送到指定的频道
  2. pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态
  3. subscribe channel [channel]:订阅一个或多个频道的信息
  4. unsubscribe [channel [channel]]:退订指定的频道,若没有指定频道,则默认退订所有频道

基于模式

  1. psubcribe pattern [pattern]:订阅一个或多个符合给定模式的频道
  2. punsubscribe [pattern [pattern]]:退订所有给定模式的频道,若pattern未指定,则订阅的所有模式都会被退订,否则只退订指定的订阅模式

基于频道(Channel)的发布/订阅


底层原理

  1. 频道订阅:订阅频道时先检查字段内部是否存在,不存在则为当前频道创建一个字典且创建一个链表存储客户端id,否则直接将客户端id插入到链表中
  2. 取消频道订阅:取消时将客户端id从对应的链表中删除,如果删除之后链表已经是空链表了,则将会把这个频道从字段中删除
  3. 发布:首先根据channel定位到字典的键,然后将信息发送给字典值链表中的所有客户端

基于模式(pattern)的发布/订阅

通配符中?表示1个占位符,_表示任意个占位符(包括0),?_表示1个以上占位符

当有信息发送到com.ahead.thread频道时,信息除了发送给client4和client5之外,还会发送给订阅com.ahead.*频道模式的client x和client y

底层原理

  1. 模式订阅:新增一个pubsub_pattern数据结构添加到链表的最后尾部,同时保存客户端ID
  2. 取消模式订阅:从当前的链表pubsub_pattern结构中删除需要取消的pubsubPattern结构
相关推荐
ketil272 分钟前
Ubuntu 安装 redis
redis
齐 飞21 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空21 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅26 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
wowocpp29 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
成富1 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq271 小时前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix1 小时前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
王佑辉1 小时前
【redis】redis缓存和数据库保证一致性的方案
redis·面试
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django