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

时间:2015-11-13 15:10:42

标签: python redis

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()之间的区别是什么?

为了保证其原子性,什么是正确的解决方案?

1 个答案:

答案 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