Redis 发布订阅详解

本文详细介绍了Redis的发布订阅功能,包括基于频道和模式的两种模式,以及它们如何应用观察者模式。通过SUBSCRIBE/UNSUBSCRIBE和PSUBSCRIBE/PUNSUBSCRIBE命令展示了客户端如何订阅、发布和管理消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 发布订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。
Redis 有两种发布订阅模式

  • 基于频道(Channel)的发布订阅
  • 基于模式(Pattern)的发布订阅

关键词:订阅、SUBSCRIBE、PSUBSCRIBE、PUBLISH、观察者模式

观察者模式

Redis 发布订阅应用了设计模式中经典的“观察者模式”。

观察者模式(Observer)是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个 “观察” 该对象的其他对象。

  • 当一个对象状态的改变需要改变其他对象,或实际对象是事先未知的或动态变化的时,可使用观察者模式。
  • 当应用中的一些对象必须观察其他对象时,可使用该模式。但仅能在有限时间内或特定情况下使用。

在这里插入图片描述

Redis 订阅模式

Redis 有两种发布订阅模式:

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

服务器状态在 pubsub_channels 字典保存了所有频道的订阅关系: SUBSCRIBE 命令负责将客户端和被订阅的频道关联到这个字典里面, 而 UNSUBSCRIBE 命令则负责解除客户端和被退订频道之间的关联。

【示例】订阅指定频道示例

打开客户端一,执行以下命令

> SUBSCRIBE first second
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "first"
3) (integer) 1
1) "subscribe"
2) "second"
3) (integer) 2

打开客户端二,执行以下命令

> PUBLISH second Hello
1) "1"

此时,客户端一会收到以下内容

1) "message"
2) "second"
3) "Hello"

(2)基于模式(Pattern)的发布订阅

服务器状态在 pubsub_patterns 链表保存了所有模式的订阅关系: PSUBSCRIBE 命令负责将客户端和被订阅的模式记录到这个链表中, 而 UNSUBSCRIBE 命令则负责移除客户端和被退订模式在链表中的记录。

【示例】订阅符合指定模式的频道

打开客户端一,执行以下命令

> PSUBSCRIBE news.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

打开客户端二,执行以下命令

> PUBLISH news.A Hello
1) "1"

打开客户端三,执行以下命令

> PUBLISH news.B World
1) "1"

此时,客户端一会收到以下内容

1) "pmessage"
2) "news.*"
3) "news.A"
4) "Hello"
1) "pmessage"
2) "news.*"
3) "news.B"
4) "World"

发布订阅命令
Redis 提供了以下与订阅发布有关的命令:

命令描述
SUBSCRIBE订阅指定频道
UNSUBSCRIBE取消订阅指定频道
PSUBSCRIBE订阅符合指定模式的频道
PUNSUBSCRIBE取消订阅符合指定模式的频道
PUBLISH发送信息到指定的频道
PUBSUB查看发布订阅状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值