【问题标题】:Streaming JSON to Redis将 JSON 流式传输到 Redis
【发布时间】:2019-07-25 07:36:07
【问题描述】:

我有一个大的 JSON 文件,我想将它存储在 Redis 中。问题是当我解析它时,Node.Js 中的内存不足

我将堆内存从 1.39GB 扩展至 4GB,但它仍在发生,我相信我没有正确执行此操作。

通过大量搜索,我发现流媒体是我最好的选择。问题是我对流媒体不是很流利,我不确定这是否能解决我的问题

我读了很多,有很多零散的信息。我想问你是否认为这是否平易近人或者这是否正确?

我能否将 JSON 对象流式传输到 Redis 中? 我是否必须对其进行 Staingifiying 或它会自动进行? 我应该逐块字符串化我的 json 块吗? 或者流到redis最终会成为一个字符串?

我正在使用 ioRedis 客户端与 Redis 交互。

提前感谢您的帮助。

【问题讨论】:

    标签: javascript node.js redis ioredis


    【解决方案1】:

    如果您可以保证只有一个处理器会更新该密钥,您可以使用SETRANGE。在解析文件时,您可以保留对下一个偏移量的引用:

    (伪代码)

    offset = 0
    offset = redis.set_range(key, offset, "string")
    

    然后您可以将文件的各个部分加载到 Redis,而不必一次将所有内容加载到内存中。

    SETRANGE返回修改后的字符串长度。

    这还假设您可以加载文件内容的片段,而无需将所有内容解析为 JSON,然后将其转换回字符串。还假设只有一个进程正在更新该密钥——如果多个进程尝试更新它,JSON 值可能会损坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2021-11-08
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多