Redis非常易于在python中使用。但是,现在我在使用Redis事务时遇到问题。首先,我必须在Redis中获得一个key
,然后我必须检查绑定到此键的值是否合法。我希望这些操作是原子性的。这是我的代码。
pipe = redis_conn.pipeline()
pipe.multi()
var = pipe.get('key_want_to_be_read')
if is_legal(val):
do_something
else:
do_another_thing
pipe.execute()
但是,当我运行这些代码时,python名称var
并没有绑定到redis中存储的值,而是绑定了Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
。有什么方法可以在Redis事务中获取密钥并将其绑定到python名称吗?
答案 0 :(得分:2)
您可以这样注册lua脚本:
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
redis_script = r.register_script("""
local valueToTest = redis.call('GET','{key}')
--Test key in lua
""".format(key=key_to_be_read))
然后用redis_script()
在Redis site中,这是原子的:
Redis使用相同的Lua解释器来运行所有命令。也 Redis保证脚本以原子方式执行:没有其他 脚本执行时将执行脚本或Redis命令 被执行。