26

我在 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() 的代码示例,但它们对我不起作用。有什么帮助吗?

4

1 回答 1

40

在 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).

于 2015-08-16T21:51:35.657 回答