1

これらの操作をアトミックに実行するにはどうすればよいですか?

def setNickName(nick):
    oldNick = r.get("user:id:1:nick") # r - instance of redis.Redis()
    updated = r.set("user:id:1:nick", nick) if r.hsetnx("user:ref:nick", nick, '1') else False

    if updated and oldNick:
        r.hdel("user:ref:nick", oldNick)
        return True

    return False
4

3 に答える 3

6

luaスクリプトを作成し、 EVALコマンドで実行できます。これにより、この手順全体が効果的にアトミックになります。

Luaスクリプトを使用したRedisはまだリリースされていません(2.6-rc5)が、すでにかなり安定していることに注意してください。

于 2012-07-05T07:05:38.667 に答える
0

watch https://github.com/andymccurdy/redis-py/#pipelinesを使用して、トランザクション内でこれを行いたいと思うでしょう。

于 2012-08-10T13:40:39.983 に答える