我有一个名为“a”的字符串键,其值为“b”,我还有一个名为“b”的哈希集,它有多个值,例如:
"a" (value equals to "b")
"b": {
"first_name": "John",
"last_name": "Doe"
}
是否可以使用管道,因此我会收到“a”键 对象b值?
由于
答案 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。