0

我知道 Redis 有事务和 pub/sub 的概念。我想知道您是否可以使用 Python redis 客户端进行事务性发布订阅。

这是设置。我有两个客户端 A 和 B 正在推送到相同的两个频道。每次,每个客户都可能将他们的名字推送到两个频道。他们可能会决定同时(或足够的时间)这样做。我希望通道看起来像 [A,B][A,B] 或 [B,A] [B,A],而不是 [A,B] [B,A]。即我需要自动让客户端发布到两个频道。

在 Redis cli 中,我会写类似 MULTI、PUBLISH FIRST A、PUBLISH SECOND A、EXEC 之类的东西。

如何在 Python 中做到这一点?

4

1 回答 1

1

MULTI/EXEC:这些是作为 Pipeline 类的一部分实现的。管道在执行时默认包含 MULTI 和 EXEC 语句,可以通过指定 transaction=False 来禁用。

https://github.com/redis/redis-py#pipelines

这是示例:

import redis
r = redis.Redis()
pipe=r.pipeline()
pipe.publish('A1','msg1')
pipe.publish('A2','msg2')
pipe.execute()

如果您通过 MONITOR 命令在 redis-cli 中对其进行监控,则会将以下消息发送到 Redis:

1641318120.640290 [0 [::1]:53268] "MULTI"
1641318120.640346 [0 [::1]:53268] "PUBLISH" "A1" "msg1"
1641318120.640362 [0 [::1]:53268] "PUBLISH" "A2" "msg2"
1641318120.640371 [0 [::1]:53268] "EXEC"
于 2022-01-04T15:01:38.673 回答