2013-03-26 161 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