2015-11-12 82 views

回答

1

使用基本Redis的API你不能做到这一点。

我可以看到两个选项供您:

  • 自己做以任何编程语言,你使用Redis的使用;
  • 做一个lua script

这是一个非常简单的LUA脚本例子,做你想要什么:

eval "return redis.call('get', redis.call('get', KEYS[1]))" 1 baz 

NB:您只能使用此脚本使用独立Redis的安装,因为它的使用不是关键通过KEYS阵列明确声明,因此它不是群集安全的(thanx到Itamar Haber的评论)。

+1

>用lua脚本做 - 不要。您正在访问未通过'KEYS'数组明确声明的密钥,并且这不是群集安全的。 –

+0

@ItamarHaber好点 –

+0

;)添加一个基于Lua的答案,应该这样做 –

1

虽然你不能用Redis Strings做到这一点,但如果你用所有的“keys”和“values”来代替hash,那么这是可行的。例如:

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)。这些应该在需要时处理。

相关问题