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

进一步阅读