2013-03-26 197 views
2

過去幾天一直在玩redis。是否可以運行像下面的一個複合命令:Redis複合命令或命令管道

MGET ZRANGE ranks 0 1 

我還沒有找到一個明確的答案從文檔,this old post,或測試:

redis 127.0.0.1:6379> ZRANGE ranks 0 1 
1) "One" 
2) "Two" 
redis 127.0.0.1:6379> MGET One Two 
1) "1" 
2) "2" 
redis 127.0.0.1:6379> MGET ZRANGE ranks 0 1 
1) (nil) 
2) (nil) 
3) (nil) 
4) (nil) 

回答

4

Redis的建在LUA腳本支持應該允許你有效地將命令鏈接在一起。見http://redis.io/commands/eval。不完全是你在找什麼,但也許這就足夠了。

一個簡單的例子:

redis> set foo bar 
OK 
redis> set bar baz 
OK 
redis> eval "return  redis.call('get',redis.call('get','foo'))" 0 
"baz" 
+0

已審覈鏈接。看起來很有希望。但是,你能否提供一個基於我的redis命令的例子。 – 2013-03-26 21:50:50

1

你的命令MGET ZRANGE ranks 0 1的作品,因爲它會與名"ZRANGE""ranks""0""1"鍵的值。所以你會得到四個(nil)迴應。 redis中沒有複合命令的概念。一些客戶端支持命令流水線。

0

你可以像這樣用Redis的LUA EVAL命令做這一切在一個命令:性能

EVAL 'local ids = redis.call("ZRANGE", "myset", 0, 100); 
return redis.call("MGET", unpack(ids));' 0 

最好的方法是使用密鑰和使用緩存的腳本。完整說明: http://redis.io/commands/eval