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结构
相关推荐
Skilce2 小时前
ZrLog 高可用部署
运维·服务器·数据库·阿里云·maven
indexsunny5 小时前
互联网大厂Java求职面试实战:微服务与Spring生态全攻略
java·数据库·spring boot·安全·微服务·面试·消息队列
沪漂阿龙5 小时前
别再让数据库“吃”脏数据了!一文讲透MySQL约束,从入门到精通
数据库·mysql
2401_873544926 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
虾..7 小时前
多路复用 --- select系统调用
服务器·数据库·sql
杨云龙UP7 小时前
mysqldump逻辑备份文件恢复总结:全库恢复、单库恢复,一篇讲明白
linux·运维·服务器·数据库·mysql·adb
ybwycx7 小时前
mysql重置root密码(适用于5.7和8.0)
数据库·mysql·adb
山楂树の7 小时前
【计算机系统原理】 组相联 Cache 地址划分与访问过程
缓存
色空大师8 小时前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
亚历克斯神8 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos