首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-redis,如何获取hash对象列表?

node-redis,如何获取hash对象列表?
EN

Stack Overflow用户
提问于 2018-03-28 15:04:52
回答 1查看 373关注 0票数 0

我使用node_redis,并在redis中存储了一些散列数据,如下所示:

代码语言:javascript
复制
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获取这些帖子,所以我编写了一个函数,如下所示:

代码语言:javascript
复制
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服务器的多个查询。

这样我就可以得到一个post数组。

这是处理来自redis服务器的多个查询的正确方式吗?

我听说还有另外一种方式,一种是pipeline,另一种是lua script?

在现实世界的项目中,哪种方法最适合我的情况?

EN

回答 1

Stack Overflow用户

发布于 2018-03-28 19:03:13

是的,你正在做的事情是正确的。Multi将对所有hgetall命令进行批处理,并在一批中执行它们。这是从redis服务器获取数据的一种有效方法。AFAIK,multi是客户端库确保命令作为管道发送到服务器的方式。

由于您仅从服务器读取数据,因此您的代码是适当的。但是,如果您必须混合读取和写入,以便您的写入命令依赖于前一个读取命令的输出,那么多方法将不起作用。在这种情况下,编写lua脚本将是唯一的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49528120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档