【问题标题】:Node JS Batch Get on Redis KeysNode JS 批量获取 Redis 密钥
【发布时间】:2020-03-26 00:07:41
【问题描述】:

我想使用批处理请求一次获取大量存储在 Redis 上的键/值。 我正在使用节点 js redis 客户端。这个想法是异步对多个键发出获取请求,有什么方法可以做到这一点?
我检查了 node js Redis 客户端中的批处理功能,据我了解,如果您想一次获取散列的所有元素,而不是在异步模式下一次获取不同键的数据,这在这种情况下很有用。

我要做的是读取所有表以根据值的属性(时间戳)选择特定的键/值

【问题讨论】:

    标签: node.js caching redis


    【解决方案1】:

    您正在寻找MGET,根据docs

    redis> SET key1 "Hello"
    "OK"
    redis> SET key2 "World"
    "OK"
    redis> MGET key1 key2 nonexisting
    1) "Hello"
    2) "World"
    3) (nil)
    

    如果您使用的是redis 包,它应该如下所示:

    client.mget(["key1", "key2", "nonexisting"], (err, val) => {
      console.log(val); //["Hello", "World", null]
    });
    

    【讨论】:

    • 不完全是,我要做的是读取所有表以根据值的属性(时间戳)选择特定的键/值
    • @Tar 您必须使用KEYS * 或重复SCAN 调用然后MGET 获取所有密钥。我认为 Redis 不支持对所有值应用逻辑并选择通过测试的值 - 这就是您在代码或数据库查询中所做的事情。
    • 是的,逻辑会在代码中完成,我只是查询 Redis 来获取数据,是否可以异步对多个键进行 SCAN,比如说一次扫描 10 个键?跨度>
    • @Tar 所有 redis 命令一开始就必须是异步的。每个SCAN 都需要前一个返回的光标,所以我不相信你可以通过这种方式轻松地进行批量并行处理。如果您想尽量减少花费的时间,使用具有正确模式的 KEYS 后跟 MGET 将使所有数据到达您的进程所需的最短旅行时间,但在处理过程中会占用更多内存并在获取所有匹配键时阻塞 redis 服务器。
    • @Tar 使用 SCAN 您需要向 redis 发出更多单独的命令,但是您和服务器都可以一次处理一个数据块,这将导致处理峰值低得多,但可能多花点时间
    猜你喜欢
    • 2013-05-14
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2022-11-03
    • 2017-06-17
    相关资源
    最近更新 更多