Redis中的原子操作

ato*_*era 1 python redis

如何原子地执行这些操作?

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

Ser*_*sev 6

您可以创建一个lua脚本并使用EVAL命令执行它.它将有效地使整个过程成为原子.

请注意,带有Lua脚本的Redis尚未发布(2.6-rc5),但它已经非常稳定了.