2

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

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

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

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

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

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

我提前感谢您的帮助。

4

1 回答 1

0

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

(伪代码)

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

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

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

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

于 2019-03-04T04:54:06.750 回答