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结构
相关推荐
Dxy12393102168 分钟前
MySQL如何高效查询表数据量:从基础到进阶的优化指南
数据库·mysql
Dying.Light11 分钟前
MySQL相关问题
数据库·mysql
蜡笔小炘1 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长1 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
IT陈图图1 小时前
CANN生态数据引擎:minddata的缓存策略与性能调优
缓存·cann
Re.不晚1 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设2 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据2 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300962 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_736919102 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python