dataloader-cache-lru

1.0.1 • Public • Published

dataloader-cache-lru

Dependency Status Download Status

LRU (least recently used) cache for Facebook's DataLoader.

Installation

npm install dataloader-cache-lru --save

Documentation

DataLoader, by default, uses the standard Map which simply grows until the DataLoader is released. The default is appropriate when requests to your application are short-lived.

Longer lived DataLoaders, such as ones which persist between GraphQL 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 DataLoader-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 DataLoader = require('dataloader');
const dataLoaderCacheLru = require('dataloader-cache-lru');
 
const cacheMap = dataLoaderCacheLru({ max: 3 }); // see options in isaacs/node-lru-cache
const dataloader = new DataLoader(batchLoadFn, { cacheMap });
 
Promise.all(
  ['a', 'b', 'c', 'd', 'e'].map(key => dataloader.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
dataloader.clear('d');
console.log(cacheMap.keys().sort()); // ['c', 'e']
 
function batchLoadFn (keys) {
  return Promise.all(
    keys.map(key => ({ key, data: key }))
  );
}

License

Copyright (c) 2017

Licensed under the MIT license.

Package Sidebar

Install

npm i dataloader-cache-lru

Weekly Downloads

128

Version

1.0.1

License

MIT

Last publish

Collaborators

  • eddystop