创建一个大型nodejs缓存

时间:2015-09-04 20:31:09

标签: javascript node.js performance caching

我想为我的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;

1 个答案:

答案 0 :(得分:1)

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