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()
指令有何不同?
实现原子性的正确方法是什么?
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 来禁用。