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结构
相关推荐
今晚务必早点睡3 小时前
微服务改数据库密码后服务仍能访问?一次“看似异常、实则常见”的生产现象全解析
数据库·微服务·oracle
老师我太想进步了20265 小时前
cmd连接MySQL及相关查询
数据库·mysql
難釋懷7 小时前
Redis命令-Set命令
数据库·redis·缓存
编程小风筝7 小时前
Spring 框架如何整合Redis缓存中间件?
redis·spring·缓存
Linux-palpitate8 小时前
PostgreSQL(PG)的1主2从集群部署安装
数据库·postgresql
heartbeat..8 小时前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
山峰哥9 小时前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
Coder_Boy_9 小时前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
小雪_Snow10 小时前
Windows 安装 MySQL 8.0 教程【安装包方式】
数据库·mysql
无敌的牛10 小时前
MySQL初阶
数据库·mysql