Redis支持发布-订阅(Pub/Sub)模式,它允许客户端(订阅者)订阅一个或多个频道,以接收消息。当有新消息发布到该频道时,所有订阅者都将接收到该消息。
发布者(Publisher)将消息发送到频道(Channel),所有订阅该频道的订阅者(Subscriber)都将接收到该消息。发布者不知道哪些订阅者订阅了该频道,也不知道它们是否接收到了消息。
Redis的发布订阅模式是基于消息通知的机制,消息发布者和消息订阅者之间没有直接联系,消息的发布者和订阅者只通过 Redis 进行消息传递。发布订阅模式的一个常见用途是实现实时消息推送,例如实时聊天应用程序或实时数据流。
下面是一些Redis发布-订阅模式常用命令:
- SUBSCRIBE channel:订阅一个频道。
- UNSUBSCRIBE channel:取消订阅一个频道。
- PUBLISH channel message:发布一条消息到指定的频道。
- PSUBSCRIBE pattern:订阅与指定模式相匹配的一个或多个频道。
- PUNSUBSCRIBE pattern:取消订阅与指定模式相匹配的一个或多个频道。
- PUBSUB subcommand [argument [argument …]]:查看发布-订阅系统状态。其中 subcommand 可以是 CHANNELS、NUMSUB、NUMPAT。CHANNELS 显示当前被订阅的频道,NUMSUB 显示指定频道的订阅者数量,NUMPAT 显示订阅的模式的数量。
在Redis中,订阅者可以订阅一个或多个频道或模式,可以使用 SUBSCRIBE 或 PSUBSCRIBE 命令进行订阅。订阅后,客户端将一直保持阻塞状态,等待新的消息到达。当新的消息发布到被订阅的频道时,Redis将消息传递给所有订阅该频道的订阅者。
下面是一个示例,展示了如何使用Redis的发布-订阅模式:
打开两个Redis客户端,一个用于发布消息,另一个用于接收消息。
在第一个客户端中执行 PUBLISH test-channel “hello world” 命令,发布一条消息到 test-channel 频道。
在第二个客户端中执行 SUBSCRIBE test-channel 命令,订阅 test-channel 频道。
在第一个客户端中再次执行 PUBLISH test-channel “hello again” 命令,发布第二条消息到 test-channel 频道。
在第二个客户端中,将会看到两条消息被打印出来,分别是 “hello world” 和 “hello again”。
Redis 的发布与订阅模式可以用于很多场景,例如实时聊天、消息通知等。同时,Redis 的发布与订阅模式还可以与其他 Redis 功能结合使用,例如配合 Lua 脚本实现更复杂的消息处理逻辑。