Redis 发布订阅


Redis 发布订阅技术文档

Redis 发布订阅(Pub/Sub)是 Redis 提供的一种消息传递机制,它允许客户端通过订阅(subscribe)频道(channel)来接收消息,同时可以通过发布(publish)消息到指定频道来通知所有订阅该频道的客户端。

使用场景

Redis 发布订阅机制广泛应用于以下场景:

  1. 实现即时通讯功能,比如在线聊天室、实时推送等;
  2. 实现消息队列,比如解耦系统中的不同模块,在应用或者系统的不同节点之间传递消息等;
  3. 监听系统事件,比如监控日志、统计流量等。

命令说明

发布(publish)命令

发布命令可以发送消息到指定频道。

语法:

PUBLISH channel message

参数说明:

  • channel:频道名称,必填参数。
  • message:发布的消息,必填参数。

返回值:

  • 返回整数类型,表示消息被发送到给定频道的订阅者的数量。

订阅(subscribe)命令

订阅命令可以在客户端订阅一个或多个频道。

语法:

SUBSCRIBE channel [channel ...]

参数说明:

  • channel:要订阅的频道名称,可以订阅一个或多个频道。

返回值:

  • 该命令不会有返回值,当消息被发布到其中一个订阅的频道时,Redis 会推送该消息到客户端。

退订(unsubscribe)命令

退订命令可以在客户端退订某个或所有频道。

语法:

UNSUBSCRIBE [channel [channel ...]]

参数说明:

  • channel:要退订的频道名称,可以退订一个或多个频道。如果未指定频道,客户端将退订所有频道。

返回值:

  • 该命令不会有返回值,客户端将不再接收退订的频道中的消息。

模式订阅(psubscribe)命令

模式订阅命令可以在客户端订阅匹配的频道模式而不是具体的频道。

语法:

PSUBSCRIBE pattern [pattern ...]

参数说明:

  • pattern:要订阅的频道模式,可以订阅一个或多个。

返回值:

  • 该命令不会有返回值,当有消息被发布到匹配一个或多个订阅的频道模式时,Redis 会推送该消息到客户端。

模式退订(punsubscribe)命令

模式退订命令可以在客户端退订匹配的频道模式。

语法:

PUNSUBSCRIBE [pattern [pattern ...]]

参数说明:

  • pattern:要退订的频道模式,可以退订一个或多个。如果未指定频道模式,客户端将退订所有频道模式。

返回值:

  • 该命令不会有返回值,客户端将不再接收退订的频道模式中的消息。

实例演示

以下示例演示了如何通过 Redis 发布订阅机制实现简单的聊天室功能。

首先,开启三个终端实例,分别作为客户端、服务端和聊天室:

  • 客户端:
$ redis-cli
  • 服务端:
$ redis-server
  • 聊天室:
$ redis-cli
> SUBSCRIBE chatroom

现在,让客户端发送消息到名为 “chatroom” 的频道:

> PUBLISH chatroom "Hello, everyone!"

此时,聊天室将收到该消息并将其推送到所有订阅该频道的客户端。

如果要通过 Redis 发布订阅机制实现更复杂的聊天室功能,比如私聊、禁言等,可以根据需要进行扩展。

总结

Redis 发布订阅机制是一种简单而强大的消息传递机制,适用于各种场景,比如即时通讯、消息队列和系统事件监听等。熟练掌握 Redis 发布订阅命令可以帮助我们更有效地实现这些功能。