/ceych

Wraps any asynchronous function and provides caching of the result

Primary LanguageJavaScriptMIT LicenseMIT

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.