redis - node-redis,如何获取哈希对象列表?

标签 redis node-redis

我使用 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/

相关文章:

redis - StackExcange.Redis.RedisTimeoutException异常

node.js - 如何理解node_redis中的参数?

azure - Azure 上的 Redis 连接断开

docker - 将 Gcloud 与 Vagrant 一起使用

caching - Cache put item并发和吞吐量

parallel-processing - Redis队列架构

node.js - Redis + Node.js -- 循环集合成员

java - 绝地武士 : Could not get a resource from the pool

redis - 在 Ignite 上使用 Redis 协议(protocol)

Docker 409 客户端错误。如何获取真实错误并查看容器中的真实日志?