Redis复合命令或命令管道

时间:2013-03-26 21:17:32

标签: 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)

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:1)

您的命令MGET ZRANGE ranks 0 1有效,因为它获取名称为"ZRANGE""ranks""0""1"的键值。所以你得到四个(nil)个回复。 redis中没有复合命令的概念。一些客户端支持命令流水线操作。

答案 2 :(得分: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