在redis-py中,MULTI和EXEC命令的等效功能是什么?

Ahs*_*que 18 python redis redis-py

我在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"
Run Code Online (Sandbox Code Playgroud)

我见过使用multi()和execute()的代码示例,但它们对我不起作用.有帮助吗?

ntk*_*tki 29

在redis-py中,MULTI和EXEC只能通过Pipeline对象使用.

请尝试以下方法:

r = redis.Redis()
p = r.pipeline()
p.set("transError", var)
p.execute()
Run Code Online (Sandbox Code Playgroud)

通过monitor命令,redis-cli您可以看到p.execute()调用时发送的MULTI,SET,EXEC .要省略MULTI/EXEC对,请使用r.pipeline(transaction=False).