cachify-wrapper
Wraps a function with a caching layer
Usage
callback
Wraps a function with a caching layer
Parameters
-
fn
functioncallback-last
style function -
storage
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
function -
storage
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 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
CacheAbsentError
Extends Error
no cache error
Functions
Storage
storage interface
get
Parameters
-
key
K -
cb
CB<V>
set
Parameters
del
Parameters
-
key
K -
cb
CB<boolean>
RecordPacked
Type: Object
Properties
InMemoryStorageCb
get
Parameters
-
key
K -
cb
CB<V>
set
Parameters
del
Parameters
-
key
K -
cb
CB<boolean>
InMemoryStorageSerializable
Extends InMemoryStorage
expire
Parameters
-
key
K -
ttl
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
K -
value
V
del
Parameters
-
key
K
has
Parameters
-
key
K
expire
Parameters
-
key
K -
ttl
number