Wraps a function with a caching layer
Wraps a function with a caching layer
fn
functioncallback-last
style functionstorage
Storage<K, RecordPacked<V>> cache storage (optional, defaultInMemoryStorageCb
)options
Options (optional, default{}
)hasher
Function creates key for KV-storage fromfn
arguments (optional, defaultJSON.stringify
)
const wrapper = require('cachify-wrapper').default;
class Storage {
constructor() {
this.data = new Map();
}
get = (key, cb) => cb(null, this.data.get(key))
set = (key, value, ttl, cb) => {
this.data.set(key, value);
if (ttl > 0) setTimeout(() => this.data.delete(key), ttl);
cb(null, true);
}
del = (key, cb) => cb(null, this.data.delete(key))
}
const storage = new Storage();
let count = 0;
const inc = (a, cb) => cb(null, count += a);
const cached = wrapper(inc, storage, {expire: 100});
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 0); // Invokes request
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 100); // Takes cached result
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 200); // Invokes second request
cached.set(2, 'manual value', 1000, () =>
cached.get(2, (_, result) => {
console.info(result);
cached.del(2, () =>
cached.get(2, (_, result) => console.info(result)))
}));
Returns function
Wraps a function with a caching layer
fn
functionstorage
Storage<K, RecordPacked<V>>?options
Options?hasher
Function?
const wrapperPromise = require('cachify-wrapper').promise;
let count = 0;
const inc = async(a) => count += a;
const cached = wrapperPromise(inc, storage, {expire: 1000});
const p1 = cached(1).then((payload) => console.info(payload)); // Invokes request
const p2 = p1.then(() => cached(1).then((payload) => console.info(payload))); // Takes cached result
Returns function (...any): Promise<any>
Type: Object
-
storage
Object?storage.timeout
number? max storage response time before considering it as failed, and invokingfn
-
source
Object?source.timeout
number? maxfn
response time before considering it as failed
-
expire
number? time to consider cached data expired [in milliseconds] -
spread
number? expire time spread (prevents simultaneous deletions saved items from storage) -
lock
number? lock timeout (prevents simultaneous concurrent invoke offn
at initial period) -
stale
number? additional ttl for stale data -
ttl
number? forced ttl (TimeToLive) for data (useful if storage is using from multiply services with different expire) -
retries
number? number of storage requests passes beforefn
call -
error
number? ttl for erroneous state cache (prevents frequent call offn
) -
verbose
number? verbosity flag
Extends Error
no cache error
storage interface
key
Kcb
CB<V>
key
Kcb
CB<boolean>
Type: Object
key
Kcb
CB<V>
key
Kcb
CB<boolean>
Extends InMemoryStorage
key
Kttl
number
Returns Iterable<KRecordTuple<K, V>>
dump
Iterable<KRecordTuple<K, V>>
Type: Object
source
Iterable<KRecordTuple<K, V>>?
key
K
key
Kvalue
V
key
K
key
K
key
Kttl
number