A Filesystem store for the node-cache-manager module
npm install cache-manager-fs-hash --save
- Saves anything that is
JSON.stringify
-able to disk - Buffers are saved as well (if they reach a certain size they will be stored to separate files)
- Works well with the cluster module
Here is an example that demonstrates how to implement the Filesystem cache store.
const cacheManager = require('cache-manager');
const fsStore = require('cache-manager-fs-hash');
const diskCache = cacheManager.caching({
store: fsStore,
options: {
path: 'diskcache', //path for cached files
ttl: 60 * 60, //time to life in seconds
subdirs: true, //create subdirectories to reduce the
//files in a single dir (default: false)
zip: true, //zip files to save diskspace (default: false)
}
});
(async () => {
await diskCache.set('key', 'value');
console.log(await diskCache.get('key')); //"value"
await diskCache.del('key');
console.log(await diskCache.get('key')); //undefined
console.log(await getUserCached(5)); //{id: 5, name: '...'}
console.log(await getUserCached(5)); //{id: 5, name: '...'}
await diskCache.reset();
function getUserCached(userId) {
return diskCache.wrap(userId /* cache key */, function () {
return getUser(userId);
});
}
async function getUser(userId) {
return {id: userId, name: '...'};
}
})();
The filename is determined by the md5 hash of the key
. (The key
is also saved in the file to detect hash collisions. In this case it will just return a cache miss). Writing is performed with .lock files so that multiple instances of the library (e.g. using the cluster module) do not interfere with one another.
npm test
cache-manager-fs-hash is licensed under the MIT license.