【问题标题】:NodeJS in-memory cache with memory pressure awareness具有内存压力感知的 NodeJS 内存缓存
【发布时间】:2026-01-21 08:25:02
【问题描述】:

我来自 Java 世界,并且有很多(本地)内存缓存的实现。此外,在 Java 世界中还有 SoftReferenceWeakReference,根据定义,它们是缓存实现的理想选择。

我知道 JavaScript 没有类似的东西,所以我想知道是否有可能具有某种缓存功能,如果存在“低内存压力”,它会删除/释放(所有)缓存对象。到目前为止,我知道lru-cache 模块,但它的实现将对象保持在某个数量/大小,这很好,但还不够好,因为如果没有足够的内存,你自然会期望缓存释放对象.

当进程内存不足时,甚至可以从系统中获取 NodeJS 中的某些事件吗?

或者可能是一些可以引发事件的库,例如:

var cmmm = require('cool_memory_management_module');

cmmm.on('low_memory', function(){
    //signaling to clear cache entries
});

到目前为止,我已经找到了 npm memwatchnpm usage 模块,但仍然无法将所有这些部分组合在一起。

【问题讨论】:

标签: node.js caching memory weak-references low-memory


【解决方案1】:

JS 中还没有WeakReferences 或类似的,但应该在ES6 (Version List)

到目前为止,您现在可以构建一些东西,如果内存耗尽,则每隔几秒钟检查一次并清理您的地图。

setInterval(function() {
    /* check if memory low and do something */
}, 2000).unref();

【讨论】:

  • 好的,但是那部分检查内存是否不足很有趣。你怎么知道内存是否低? process.memoryUsage() 实际上并没有说“你内存不足”之类的东西。只有当前的 heapTotal 和 heap 使用情况,但在下一刻,V8 可以“malloc”更多的内存,所以 heapTotal 会改变..
  • 杰普。如果你真的想在一次往返中完成,请点击自己进入process.nextTick()