@ashnazg/cachomatic
v0.0.3
Published
mem/disk app-side caching w/expiration
Downloads
2
Readme
title: "@ashnazg/cachomatic" sidebar_label: "cachomatic"
I wrote a expiring-memoization decorator that has an optional disk-backed layer.
It understands promises, and excludes any non-serializable part of the underlying function's params from the cache-id.
Usage
var {createCacheAround} = require('@ashnazg/cachomatic');
async function doWork(...whatever_args) {
return {whatever:'result'};
}
// this'll create a memory-backed cache who's entries expire after 1 day.
var doLessWork = createCacheAround({func:doWork});
var slowly_answered = await doLessWork('question');
var immediately_answered = await doLessWork('question');
// there's a "ttl" conf for setting the expiration:
var doLeastWork = createCacheAround({
func:doWork,
ttl: {
// as long as at least _one_ of these fields is given, it's a valid TTL
weeks: 1,
days: 2,
hours: 7,
minutes: 5,
seconds: 12,
ms: 42
},
/*optional onLethal(err) {handle errors yourself instead of exiting}*/
});
disk-backed
Memory-only is good for many production cases, but as a dev, I hate having the cache empty every time I touch the server code.
If you create your wrapper with {path: '/tmp/convenient-label'}
it'll use that as a prefix for creating one file per cache entry, resembling $path-$integer
.
var persistReboot = createCacheAround({
func:doWork,
path: '/tmp/cachomatic-demo',
ttl: { hours: 8 }
});
Release 0.0.3
the optional hook onLethal() wasn't being called.
Release 0.0.2
Despite the docs saying they're the same, I'm having better luke with require('fs/promises')
than I am with require('fs').promises
Release 0.0.1
First release. is passing my test harness, but hasn't been used in a real system yet.