我在redis-cli中测试了所有事务命令(MULTI,EXEC,WATCH,DISCARD)。但是当我尝试使用redis-py时,发生了以下错误:
AttributeError:'Redis'对象没有属性'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()的代码示例,但它们对我不起作用。有帮助吗?
答案 0 :(得分:25)
在redis-py中,MULTI和EXEC只能通过Pipeline对象使用。
尝试以下方法:
r = redis.Redis()
p = r.pipeline()
p.set("transError", var)
p.execute()
通过monitor
redis-cli
命令,您可以看到调用p.execute()
时发送的MULTI,SET,EXEC。
要省略MULTI / EXEC对,请使用r.pipeline(transaction=False)
。