【发布时间】:2015-11-12 20:40:15
【问题描述】:
基本设置是这样的:
SET foo bar
SET baz foo
这样的事情可以在单个语句中实现吗?
GET GET baz
"bar"
谢谢
【问题讨论】:
标签: redis
基本设置是这样的:
SET foo bar
SET baz foo
这样的事情可以在单个语句中实现吗?
GET GET baz
"bar"
谢谢
【问题讨论】:
标签: redis
虽然您不能使用 Redis 字符串来做到这一点,但如果您保留一个包含所有“键”和“值”的哈希值,这是可行的。例如:
HSET miniredis foo bar
HSET miniredis baz foo
现在,要获取货物,您需要 Lua,但由于所有内容都捆绑在一个数据结构中,因此它将是集群安全的(以可扩展性为代价)。
EVAL "return redis.call('HGET', KEYS[1], redis.call('HGET', KEYS[1], ARGV[1]))" 1 miniredis baz
当然,这仅在始终存在一个取消引用级别时才有效。另一个特点是自我引用的能力(例如HSET miniredis minime minime)。如果需要,应该处理这些。
【讨论】:
你不能使用基本的 redis API 来做到这一点。
我可以看到两个选项:
这是一个非常简单的 lua 脚本示例,做你想做的事:
eval "return redis.call('get', redis.call('get', KEYS[1]))" 1 baz
注意:您只能将此脚本与独立的 redis 安装一起使用,因为它使用未通过 KEYS 数组显式声明的键,因此它不是集群安全的(感谢 Itamar Haber 的评论)。
【讨论】:
KEYS 数组显式声明的键,这不是集群安全的。