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れたときに送信される MULTI、SET、EXEC を確認できます。p.execute()MULTI/EXEC ペアを省略するには、 を使用しますr.pipeline(transaction=False)

于 2015-08-16T21:51:35.657 に答える