Redis发布、订阅模式(Pub/Sub)详解

Redis发布、订阅模式(PUB-SUB)详解

Redis的发布订阅(Pub/Sub)机制是一种消息通信模式,用于消息的广播。它允许多个客户端订阅(Subscribe)特定的频道(Channel),并在消息发布者(Publisher)向频道发布消息时,所有订阅该频道的客户端都能接收到消息。

工作原理

  1. 通信方式

    • Redis的发布-订阅模式基于消息的发布与订阅。消息由发布者发布到频道(Channel),而订阅者则可以订阅一个或多个频道,接收发布者发送到这些频道的消息。
  2. 频道(Channel)

    • 频道是消息的通道,发布者将消息发送到特定的频道,订阅该频道的订阅者会接收到这些消息。频道在Redis中是一个由字符串标识的名字。
  3. 发布消息

    • 发布者通过向指定频道发送消息来发布消息。多个订阅者可以订阅同一个频道,发布者发送的消息将被所有订阅了该频道的订阅者接收。
  1. 订阅消息
  • 订阅者通过执行订阅命令来订阅一个或多个频道。一旦订阅成功并且频道有消息发布,订阅者将接收到这些消息。
  1. 取消订阅
    • 订阅者可以随时取消对某个或所有频道的订阅,取消订阅后将不再接收该频道的消息。

使用方法

  1. 发布消息
    • 使用Redis的 PUBLISH 命令向指定的频道发布消息。

      redis 复制代码
      PUBLISH channel message

      其中,channel 是频道的名称,message 是要发送的消息内容。

  1. 订阅频道

    • 使用Redis的 SUBSCRIBE 命令订阅一个或多个频道。

      redis 复制代码
      SUBSCRIBE channel [channel ...]
    • Redis还支持模式订阅(Pattern Subscription),可以使用 PSUBSCRIBEPUNSUBSCRIBE 命令订阅和取消订阅模式。

    • 例如 PSUBSCRIBE news* 可以订阅所有以 news 开头的频道。

    • 订阅成功后,Redis客户端将进入订阅模式,等待接收频道发布的消息。

    • 返回值为当前订阅的频道数量。

  2. 取消订阅

    • 使用Redis的 UNSUBSCRIBE 命令取消对一个或多个频道的订阅。

      redis 复制代码
      UNSUBSCRIBE [channel [channel ...]]

      如果不指定频道名称,则取消所有频道的订阅。

Tips:

  1. 消息丢失
    • 如果订阅者在消息发布之前或之后才订阅或取消订阅某个频道,那么该订阅者可能会错过在它未订阅期间发布的消息。也就是说,只有在订阅者实时在线并且订阅了频道的情况下才能接收到消息。
  1. 无持久化
    • Redis的Pub/Sub模式不会持久化消息,也就是说,消息在发布后立即被传递给当前在线的订阅者,之后不会保存。如果订阅者断开连接或Redis服务器重启,已发布但未接收的消息将会丢失。


  1. 无确认机制
    • Pub/Sub模式中没有类似于消息队列中的确认机制,没有办法确保消息一定被所有订阅者成功处理。例如,如果某个订阅者在处理消息时崩溃,消息不会重新发送给该订阅者。
  1. 非事务性
    • 消息的发布和接收是非事务性的。发布者发布消息后,不会等待订阅者的应答,即便订阅者在消息发布后立即掉线,发布者也不会知道。

由于这些无保证性,Redis的Pub/Sub模式主要适用于那些对消息可靠性要求不高的应用场景。

相关推荐
小爬虫程序猿几秒前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
wowocpp1 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
Ai 编码助手6 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员7 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle7 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻7 小时前
MySQL排序查询
数据库·mysql
萧鼎7 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^7 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神7 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师7 小时前
Oracle 23AI创建示例库
数据库·oracle