Redis管道 - 原子获取另一个键值的值

时间:2016-09-11 15:52:58

标签: python redis

我有一个名为“a”的字符串键,其值为“b”,我还有一个名为“b”的哈希集,它有多个值,例如:

"a" (value equals to "b")

"b": {
       "first_name": "John",
       "last_name": "Doe"

}

是否可以使用管道,因此我会收到“a”键 对象b值?

由于

2 个答案:

答案 0 :(得分:3)

管道不起作用,因为您必须等到第一个get命令返回真实密钥,即 b

相反,您可以使用lua scripts来实现它。

local real_key = redis.call('get', KEYS[1])
if real_key then return redis.call('hgetall', real_key) end

整个lua脚本以原子方式执行。

答案 1 :(得分:2)

Pipeline是发送多个操作的优化。它不保证原子性,只有在管道执行后才能获得回复。在这种情况下,它似乎不适合您正在尝试做的事情。

IIUC,你想" dereference"第一个键中的值,并获取第二个键中的数据。我怀疑当你使用术语"原子地"你的意思是一次调用服务器。 Redis不支持这种模式 - 相反,您应该在a中获取值,然后从b获取HMGET。