/cache

LRU (least recently used) cache. Compatible with feathers-hooks-common cache hooks and BatchLoader.

Primary LanguageJavaScriptMIT LicenseMIT

@feathers-plus/cache

Dependency Status Download Status

LRU (least recently used) cache for @feathers-plus/batch-loader and @feathers-plus/feathers-hooks-common cache hook.

Installation

npm install @feathers-plus/cache --save

Documentation

@feathers-plus/batch-loader, by default, uses the standard Map which simply grows until the BatchLoader is released. The default is appropriate when requests to your application are short-lived.

Longer lived BatchLoaders, such as ones which persist between @feathers-plus/feathers-hooks-common fastJoin hook queries, will build up memory pressure unless the size of the cache is controlled. Furthermore, if records mutate, their cache entries must be removed.

This BatchLoader-compatible cache implements a LRU (least recently used) cache, it deletes the least recently used items when the cache size is exceeded.

Complete Example

const BatchLoader = require('@feathers-plus/batch-loader');
const feathersCache = require('@feathers-plus/cache');

const cacheMap = feathersCache({ max: 3 }); // see options in isaacs/node-lru-cache
const batchLoader = new BatchLoader(batchLoadFn, { cacheMap });

Promise.all(
  ['a', 'b', 'c', 'd', 'e'].map(key => batchLoader.load(key))
)
  .then(data => {
    console.log(data); // [{ key: 'a', data: 'a' }, ..., { key: 'e', data: 'e' }]
    console.log(cacheMap.keys().sort()); // ['c', 'd', 'e']
  });

// record with key 'd' has been mutated
batchLoader.clear('d');
console.log(cacheMap.keys().sort()); // ['c', 'e']

function batchLoadFn (keys) {
  return Promise.all(
    keys.map(key => ({ key, data: key }))
  );
}

Note

lib/hooks contains hooks to clear the keys of mutated records.

License

Copyright (c) 2017

Licensed under the MIT license.