在redis
中,它说:
使用MULTI命令输入Redis事务。
对于Python
API:
r = redis.Redis(...)
pipe = r.pipeline()
current_value = pipe.get('someKey')
#pipe.multi()
pipe.set('someKey', current_value + 1)
pipe.execute()
有和没有pipe.multi()
之间的区别是什么?
为了保证其原子性,什么是正确的解决方案?
答案 0 :(得分:1)
Pipelining
是一种机制,可以为您节省(RTT)往返时间,当您实际想要批量更新/查询密钥而您不需要回复时每个键本身。
Multi
实际上会使事务成为原子;所以将一组命令组合成一个命令,example将是:
MULTI
SADD foo a
SADD foo b
EXEC
如果有人在事务发生期间在OR之前查询foo
的值,他们将获得NULL
,而在事务完成后有人查询将获得a,b
,因此没有你自己获得a
的可能性。
Python / Redis API参考默认将其设置为MULTI
,如果您不需要,可以将其设置为false,MULTI/EXEC: These are implemented as part of the Pipeline class. The pipeline is wrapped with the MULTI and EXEC statements by default when it is executed, which can be disabled by specifying transaction=False.
Reference