2015-11-12 75 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)。這些應該在需要時處理。

相關問題