Redis 中的交易 pubsub 与 python redis 客户端
transactional pubsub in Redis with python redis client
我知道 Redis 有事务的概念 pub/sub。我想知道您是否可以使用 Python redis 客户端进行事务性 pubsub。
这是设置。我有两个客户 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 中执行此操作??
MULTI/EXEC:这些是作为管道 class 的一部分实现的。管道在执行时默认用 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"
我知道 Redis 有事务的概念 pub/sub。我想知道您是否可以使用 Python redis 客户端进行事务性 pubsub。
这是设置。我有两个客户 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 中执行此操作??
MULTI/EXEC:这些是作为管道 class 的一部分实现的。管道在执行时默认用 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"