过去几天一直在玩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)
答案 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