2015-09-04 6 views
1

Я хочу создать большой кеш в памяти для моего REST API. Как я могу сделать так, чтобы, когда кеш становится слишком большим, старые объекты очищаются?Создание большого кэша nodejs

Я использую 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; 
+0

Я думаю, что эта ссылка может быть полезна: http://crunchify.com/how-to-create-a-simple-in-memory-cache-in-java-lightweight-cache/ –

ответ

1

Вы ищете то, что называется наименее используемым (LRU) кэшем. Он избавится от самых старых доступных данных, как только размер кэша достигнет определенного порога. Этот довольно популярен: https://www.npmjs.com/package/lru-cache

Смежные вопросы