我有一个大的JSON文件,我想将其存储在redis中。问题是当我解析它时,我在node.js
中用完了内存。我将堆内存从1.39GB扩展到4GB,它仍在发生,我相信我没有做得正确。
通过大量搜索,我发现流媒体是我最好的选择。问题是我并没有真正能说出流媒体和我不确定这是否可以解决我的问题
我读了很多,并且有很多分散的信息。我想知道您是否认为这是否可以平易近人,还是正确?
我可以将JSON对象流式传输到redis中吗?我是否必须对其进行安排,还是会自动进行?我应该通过大块串起我的json吗?还是流入redis最终会成为字符串?
我正在使用ioredis客户端与redis交互。
我感谢您提前的帮助。
如果您可以保证只有一个处理器会更新该密钥,则可以使用setrange。解析文件时,您可以保留对下一个偏移的参考:
(psuedo代码)
offset = 0
offset = redis.set_range(key, offset, "string")
然后,您可以将文件的一部分加载到redis,而无需一次将所有内容加载到内存中。
SETRANGE
修改后返回字符串的长度。
这也假定您可以加载文件内容的部分,而无需在JSON然后将所有内容解析,然后将其转换回字符串。还假设只有一个过程正在更新该密钥 - 如果多个进程尝试更新它,则JSON值可能会损坏。