【问题标题】:Creating a large nodejs cache创建大型 nodejs 缓存
【发布时间】:2015-12-01 02:08:42
【问题描述】:

我想为我的 REST API 创建一个大型内存缓存。我怎样才能使缓存变得太大时清除旧对象?

我在这个项目中使用 nodejs。

编辑:我暂时做了一个缓存类,这是一种可扩展且完全优化的方法吗?

这里采用的方法是在对象中存在一个指针值(_index),缓存资源将被放置在其中。之后,指针递增。一旦指针达到limit 的值,它就会被设置回零,并且该过程继续进行,除非此时指针处的值被覆盖。

class Cache {
  constructor(limit = 2048) {

    if (typeof limit !== 'number' || limit <= 0) { limit = Infinity; }

    this.limit = limit;
    this.purge();
  }
  purge() {

    this._index = 0;
    this._values = [];
    this._keys = [];
  }
  put(key, value) {

    if ((let existingIndex = this._indexOf(key)) !== undefined) {
      this._keys[existingIndex] = key;
      this._values[existingIndex] = value;
    } else {
      this._keys[this._index] = key;
      this._values[this._index] = value;
      this._nextIndex();
    }
  }
  get(key) {

    let index = this._indexOf(key);
    if (index === undefined) { return; }
    return this._values[index];
  }
  delete(key) {

    let index = this._indexOf(key);
    if (index === undefined) { return false; }
    this._keys[index] = null;
    this._values[index] = null;
    return true;
  }
  has(key) {

    return this._indexOf(key) !== undefined;
  }
  _indexOf(key) {

    let i = this.limit;
    while (i--) {
      if (this._keys[i] === key) {
        return i;
      }
    }
  }
  _nextIndex() {

    this._index += 1;
    if (this._index > this.limit) { this._index = 0; }
  }
}

export default Cache;

【问题讨论】:

标签: javascript node.js performance caching


【解决方案1】:

您正在寻找所谓的最近最少使用 (LRU) 缓存。一旦缓存的大小达到指定的阈值,它将删除最旧的访问数据。这个很受欢迎:https://www.npmjs.com/package/lru-cache

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多