发布订阅
核心知识点:
1.Redis提供简单的发布订阅功能,缺陷在于不能回溯、不能堆积消息。
2.命令
a.publish:发布消息
b.subscribe:订阅频道
c.unsubscribe:取消订阅
d.psubscribe/punsubscribe:模式订阅或取消订阅
e.pubsub:查看活跃频道、查看频道订阅数、查看模式订阅数
Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,
发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息。
下面会介绍一些相关命令:
1.发布消息
publish channel message
返回的结果为订阅者的个数,如果此时没有订阅,返回0:
127.0.0.1:6379> publish channel:sports "Kobe retired today" (integer) 0
2.订阅消息
subscribe channel [channel ...]
订阅者可以订阅一个或者多个频道:
127.0.0.1:6379> subscribe channel:sports Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "channel:sports" 3) (integer) 1 ...此处是等待中
在另一个客户端发布一条消息:
127.0.0.1:6379> publish channel:sports "The Timberwolves win the Lakers" #森林狼大胜湖人 (integer) 1
当前订阅者会收到消息:
127.0.0.1:6379> subscribe channel:sports Reading messages... (press Ctrl-C to quit) ... 1) "message" #消息 2) "channel:sports" #频道 3) "The Timberwolves win the Lakers" #内容
有关订阅命令有两点需要注意:
(1)客户端在执行订阅命令之后进入订阅状态,只能接收subscribe、pubscribe、unsubscribe、pinsubscribe四个命令;
(2)新开启的订阅客户端,无法接收到该频道之前的消息,因为Redis不会对发布的消息持久化。
3.取消订阅
unsubscribe [channel [channel ...]]
客户端可以通过unsubscribe命令取消对指定频道的订阅,取消成功后,不会再收到该频道发布的消息:
127.0.0.1:6379> unsubscribe channel:sports 1) "unsubscribe" 2) "channel:sports" 3) (integer) 0
4.按照模式订阅和取消订阅
psubscribe pattern [pattern ... ]
punsubscribe [pattern [pattern ... ]]
除了subscribe和unsubscribe命令,Redis还支持glob风格的订阅命令psubscribe和取消订阅命令punsubscribe:
127.0.0.1:6379> psubscribe w* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "w*" 3) (integer) 1
5.查询订阅
(1)查看活跃的频道
pubsub channels [pattern]
所谓活跃的频道是指当前频道至少有一个订阅者,其中[pattern]是可以指定具体的模式:
127.0.0.1:6379> pubsub channels 1) "write" 2) "water"
(2)查看频道的订阅数
pubsub numsub [channel ... ]
返回某一个频道的订阅数:
127.0.0.1:6379> pubsub numsub write 1) "write" 2) (integer) 1 #订阅数为1
(3)查看模式订阅数
pubsub numpat
所有的模式订阅也可以视作模糊订阅,就是使用subscribe来订阅频道的用户。
127.0.0.1:6379> pubsub numpat #当前没有模式订阅的用户 (integer) 0
虽然和很多专业的消息队列系统(Kafka、RocketMQ)相比,Redis的发布订阅略显粗糙,功能也有些简单,例如不支持消息堆积和回溯
但是胜在足够简单,如果当前场景可以容忍这些缺点,也是一个不错的选择。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理