dot 您所在城市的活动即将迎来速度的未来。

加入 Redis 发布会

分布式事件

返回术语表

Redis 的发布/订阅消息传递可以扩展以创建有趣的分布式事件。假设我们有一个存储在哈希中的结构,但我们希望仅在特定字段超过订阅者定义的数值时更新客户端。我们将监听通道模式,然后才获取 status 处的哈希。在此示例中,我们只对 update_status 在 5 到 9 之间的更新感兴趣。

> PSUBSCRIBE update_status:[5-9]
1) "psubscribe"
2) "update_status:[5-9]"
3) (integer) 1
[waits]

为了更改 status/error_level 的值,我们将有一个子例程,它按顺序运行两个命令,或者在 MULTI/EXEC 块 中运行。第一个命令设置级别,第二个命令发布通知,并以编码在通道本身中的值发布通知。

> HSET status error_level 5
(integer) 1
> PUBLISH update_status:5 0
(integer) 1

当收到消息时,我们的客户端应用程序将切换到另一个客户端,并发出 HGETALL 命令

> HGETALL status
1) "error_level"
2) "5"
3) "last_error"
4) "Crawler returned 404"
5) "timestamp"
6) "1511467605734"

然后,我们可以使用它来更新长时间运行进程的本地变量,例如。这允许同一进程的多个实例以实时方式“共享”数据。

与仅使用发布/订阅相比,此模式的优点是,当进程重新启动时,它可以简单地获取整个状态哈希并开始监听。然后,更改将在任意数量的进程之间同步。如果实例与 Redis 服务器断开连接,作为重新连接的一部分,服务器可以获取状态哈希并重新开始监听。