ceych
Wraps any asynchronous function and provides caching of the result
Installation
npm install --save ceych
Usage
'use strict';
const request = require('request');
const Catbox = require('catbox').Client;
const Redis = require('catbox-redis');
const ceych = require('ceych').createClient({
cacheClient: new Catbox(new Redis({
port: 6379,
host: '127.0.0.1',
partition: 'cache'
})),
defaultTTL: 30
});
function loadData(cb) {
request.get('https://www.big-data.com/datum.csv', cb);
}
const loadDataCached = ceych.wrap(loadData);
loadDataCached((err, res) => {
// `res` is returned from the server and stored in the cache
loadDataCached((err, res) => {
// `res` is returned from the cache until TTL expiry
});
});
How does it work?
Ceych automatically creates cache keys based on the wrapped function's body and the arguments passed. This saves you from having to create a unique cache key every time you want the result of a function to be cached.
Return values and arguments need to be serializable to/from JSON. This means that while strings, numbers and basic objects are supported, objects with custom constructors or prototypes are not.
StatsD integration
When using a node-statsd client, ceych will increment a counter each time there is a cache hit or miss. The following metrics are sent:
Metric | Type | Description |
---|---|---|
ceych.hits | counter |
Incremented whenever there is a cache hit |
ceych.misses | counter |
Incremented whenever there is a cache miss |
API
Ceych.createClient(opts)
Creates a ceych client.
Parameters
cacheClient
- optional - A Catbox client (defaults to an in-memory client).defaultTTL
- optional - The default TTL for caching in seconds (default 30).statsClient
- optional - An instance of the node-statsd client
ceych.wrap(fn, ttl, suffix)
Returns a wrapped function that implements caching.
Parameters
fn
- An asynchronous function to be wrapped. The last argument must be a callback.ttl
- optional - Overrides the default TTL.suffix
- optional - A string appended to cache keys to differentiate between identical functions.
ceych.disableCache()
Disables the cache client to allow for wrapped methods to be tested as normal.