使用python redis事务时,有什么方法可以插入一些python语句吗?

时间:2018-08-29 08:01:33

标签: python redis

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名称吗?

1 个答案:

答案 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命令   被执行。