我使用 node_redis
并且我在 redis 中存储了一些哈希数据,如下所示:
127.0.0.1:6379> keys *
1) "posts:list"
2) "posts:page.view"
3) "slug.to.id"
4) "posts:count"
5) "post:1002"
6) "post:1001"
7) "post:3"
8) "post:2"
9) "post:1000"
127.0.0.1:6379> type post:2
hash
我想通过id获取这些帖子,所以我写了一个这样的函数:
function getPostsByPage(page = 1, pageSize = 10) {
const start = (page - 1) * pageSize;
const end = page * pageSize - 1;
return client.lrangeAsync('posts:list', start, end).then(postIds => {
const multi = client.multi();
postIds.forEach(postId => {
multi.hgetall(`post:${postId}`);
});
return multi.execAsync();
});
}
目前,我使用 redis.multi()
方法来处理来自 redis 服务器的多个查询。
所以我可以获得一个帖子数组。
这是处理来自 redis 服务器的多个查询的正确方法吗?
听说还有另外一种方式,一种是pipeline
,另一种是lua
脚本?
哪种方法最适合我在实际项目中的案例?
最佳答案
是的,你所做的是正确的。 Multi
将批处理所有的 hgetall
命令并在一批中执行它们。从redis服务器获取数据是一种高效的方式。 AFAIK,multi 是客户端库确保您的命令作为管道发送到服务器的方式。
因为您只是从服务器读取数据,所以您的代码是合适的。但是,如果您必须混合读取和写入,这样您的写入命令取决于先前读取命令的输出 - 那么多方法将不起作用。在这种情况下,编写 lua 脚本将是唯一的选择。
关于redis - node-redis,如何获取哈希对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49528120/