redis-py 中 MULTI 和 EXEC 命令的等效功能是什么?
What are equivalent functions of MULTI and EXEC commands in redis-py?
我在redis-cli 中测试了所有事务命令(MULTI、EXEC、WATCH、DISCARD)。但是当我尝试使用 redis-py 时,出现了以下错误:
AttributeError: 'Redis' object has no attribute 'multi'
我尝试了以下代码片段:
import redis,time
r = redis.Redis()
try:
r.set("transError",10)
r.watch("transError")
var = r.get("transError")
var = int(var) + 1
print "Run other client to simulate an error without transaction"
time.sleep(4)
r.multi()
r.set("transError",var)
r.execute()
print "Value in first client",r.get("transError")
except redis.WatchError:
print "Value Altered"
我看过使用 multi() 和 execute() 的代码示例,但它们对我不起作用。有什么帮助吗?
在 redis-py 中,MULTI 和 EXEC 只能通过 Pipeline 对象使用。
尝试以下操作:
r = redis.Redis()
p = r.pipeline()
p.set("transError", var)
p.execute()
通过 redis-cli
使用 monitor
命令,您可以看到调用 p.execute()
时发送的 MULTI、SET、EXEC。
要省略 MULTI/EXEC 对,请使用 r.pipeline(transaction=False)
.
我在redis-cli 中测试了所有事务命令(MULTI、EXEC、WATCH、DISCARD)。但是当我尝试使用 redis-py 时,出现了以下错误:
AttributeError: 'Redis' object has no attribute 'multi'
我尝试了以下代码片段:
import redis,time
r = redis.Redis()
try:
r.set("transError",10)
r.watch("transError")
var = r.get("transError")
var = int(var) + 1
print "Run other client to simulate an error without transaction"
time.sleep(4)
r.multi()
r.set("transError",var)
r.execute()
print "Value in first client",r.get("transError")
except redis.WatchError:
print "Value Altered"
我看过使用 multi() 和 execute() 的代码示例,但它们对我不起作用。有什么帮助吗?
在 redis-py 中,MULTI 和 EXEC 只能通过 Pipeline 对象使用。
尝试以下操作:
r = redis.Redis()
p = r.pipeline()
p.set("transError", var)
p.execute()
通过 redis-cli
使用 monitor
命令,您可以看到调用 p.execute()
时发送的 MULTI、SET、EXEC。
要省略 MULTI/EXEC 对,请使用 r.pipeline(transaction=False)
.