cachify-wrapper
v6.0.18
Published
Wraps a function with a caching layer
Downloads
564
Maintainers
Readme
cachify-wrapper
Wraps a function with a caching layer
Usage
callback
Wraps a function with a caching layer
Parameters
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
)
Examples
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
promise
Wraps a function with a caching layer
Parameters
fn
functionstorage
Storage<K, RecordPacked<V>>?options
Options?hasher
Function?
Examples
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>
Options
Type: Object
Properties
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 datattl
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
callerror
number? ttl for erroneous state cache (prevents frequent call offn
)verbose
number? verbosity flag
CacheAbsentError
Extends Error
no cache error
Functions
Storage
storage interface
get
Parameters
key
Kcb
CB<V>
set
Parameters
del
Parameters
key
Kcb
CB<boolean>
RecordPacked
Type: Object
Properties
InMemoryStorageCb
get
Parameters
key
Kcb
CB<V>
set
Parameters
del
Parameters
key
Kcb
CB<boolean>
InMemoryStorageSerializable
Extends InMemoryStorage
expire
Parameters
key
Kttl
number
export
Returns Iterable<KRecordTuple<K, V>>
import
Parameters
dump
Iterable<KRecordTuple<K, V>>
InMemoryStorageRecord
Type: Object
Properties
InMemoryStorage
Parameters
source
Iterable<KRecordTuple<K, V>>?
get
Parameters
key
K
set
Parameters
key
Kvalue
V
del
Parameters
key
K
has
Parameters
key
K
expire
Parameters
key
Kttl
number