Redis复合命令或命令管道

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)
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"

查看了链接,看起来很有前途。不过,您能否提供一个基于我的 Redis 命令的示例呢? - Jason McCreary

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


1
你的命令MGET ZRANGE ranks 0 1是有效的,因为它获取了名称为"ZRANGE""ranks""0""1"的键的值。因此,你得到了四个(nil)响应。Redis没有复合命令的概念。一些客户端支持命令管道。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接