RedisPub/Sub
Pub/Sub 是一种从任意数量的数据_发布者_那里收集数据的方法,允许 1 个或多个_订阅者_实时消费馈送,而无需直接连接到发布者。 这种模式使系统更容易扩展,并允许随时添加或删除发布者和订阅者。
Redis允许创建发布者和订阅者接口的 Pub/Sub_通道_。 通道上的信息会以 "_最多一次_的方式发送给每个订阅者,因此非常适合用于触发不可重复的操作,但要注意的是,通道信息一旦发送,就不会被持久化。
使用案例
- 实时信息。
- 短暂的多用户聊天。
- 日志流。
订阅频道
_订阅者_只需发出 "SUBSCRIBE
> SUBSCRIBE mychannel
如果订阅者需要订阅多个频道,这也是可能的:
> SUBSCRIBE mychannel1 mychannel2 mychannel3
订阅频道意味着订阅者在订阅_后_将收到该频道发布的任何信息。 较早的信息不会被持久化,因此订阅者必须连接并订阅,才能在信息发生时获取信息。
如果通道不存在,订阅者将不会看到任何错误,也不会看到任何信息。
发布到频道
发布者可以使用 "PUBLISH <channel> <message> 命令向频道发布信息:
> PUBLISH mychannel "my first message"
任何订阅者都会收到如下信息:
1) "message"
2) "mychannel"
3) "my first message"
订阅信息包括频道名称和信息本身。
一种常见的模式是发送 JSON 对象作为信息文本:
> PUBLISH mychannel '{"id":"1234","name":"db14","msg":"Out of Memory"}'
PUBLISH 的返回值是一个整数,它告诉调用者有多少用户收到了信息。
选择性订阅
可以订阅通配符频道,而不是订阅整个频道。 例如,通过谨慎命名通道,这有助于查看应用程序的所有日志、生产日志或生产数据库的日志。
> PSUBSCRIBE *
> PSUBSCRIBE prod_*
> PSUBSCRIBE prod_database_*
> PSUBSCRIBE prod_database_db57_activity_*
退订
订阅者可以通过以下方式取消订阅所有频道:
> UNSUBSCRIBE