Python 中的 Redis:有和没有 multi() 函数的区别

问题描述 投票:0回答:1

Redis 文档 说:

使用 MULTI 命令输入 Redis 事务。

这是一个使用

Python
API 与 Redis 服务器交互的示例:

r = redis.Redis(...)
pipe = r.pipeline()
current_value = pipe.get('someKey')
#pipe.multi()
pipe.set('someKey', current_value + 1)
pipe.execute()

pipe.multi()
指令有何不同?

实现原子性的正确方法是什么?

python redis transactions
1个回答
3
投票

Pipelining
是一种机制,可以节省您的 (RTT) 往返时间,当您实际上想要批量更新/查询密钥并且不需要单独回复每个密钥时。

Multi
实际上会使交易原子化;因此,将一组命令组合成一个命令,示例将是:

MULTI 
SADD foo a 
SADD foo b 
EXEC

如果有人在交易发生之前或期间查询

foo
的值,他们将得到
NULL
而有人在交易完成后查询将得到
a,b
,所以你不可能得到
a 
本身。

Python/Redis API 参考默认将其设置为

MULTI
,如果不需要,可以将其设置为 false。来自参考

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

© www.soinside.com 2019 - 2024. All rights reserved.