3

这几天一直在玩redis 。是否可以运行如下复合命令:

MGET ZRANGE ranks 0 1

我还没有从文档、这篇旧帖子或测试中找到明确的答案:

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

3 回答 3

5

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"
于 2013-03-26T21:43:50.370 回答
1

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

于 2013-03-27T21:57:22.150 回答
1

您可以使用 Redis lua EVAL 命令在一个命令中完成所有操作,如下所示:

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

提高性能的最佳方法是使用密钥并使用缓存脚本。此处的完整说明: http ://redis.io/commands/eval

于 2013-04-20T15:33:52.817 回答