node package manager
We need your input. Help make JavaScript better: Take the 2017 JavaScript Ecosystem survey »



A nice in-memory cache for node.js. In addiction of the classic auto-flush mechanism, it comes with an auto-refresh mechanism.

Node version: 0.8.0 required

Build status: Build Status



npm install nice-cache


A simple usage with a web-server that consumes an API or reads from a DB:

  • Try getting a value from the cache
  • When a key is not found:
    • you set the value
    • then you subscribe a delegate function to the refresh loop, that will happen every 60 seconds.
var Cache = require('nice-cache'),
    http = require('http');
var cache = new Cache({ refreshInterval: 60 });
http.createServer(function (req, res) {
  var getUsers = function(callback){
    // do something asynchronous... 
    callback(err, result);
  var users = cache.get('api-responses', 'users');
    return res.end(users);
  getUsers(function(err, result){
    cache.set('api-responses', 'users', result);
    cache.sub('api-responses', 'users', getUsers);
}).listen(1337, '');


new Cache([options])

Gets the current instance of the cache (eventually after creating it).

The optional options parameter can consist on one of more of the following properties:

  • singleton, bool, default true, when false returns a new instance after any initialisation.
  • refreshInterval, int, default 0, sets the refresh interval for the subscribed functions (seconds). When 0 it does nothing.
  • flushInterval, int, default 0, sets the flush interval for all the keys. When 0 it never flushes and so values never expire.
  • verbose, bool, default false, writes stuff on the console for debugging purposes.

Cache#set([type, ] key, value)

Sets a value. Type is optional.

Cache#get([type, ] key)

Gets a value. Type is optional. Returns undefined when a key is not found.


Cleans the cache

Cache#sub([type, ] key, func)

Subscribes the key-value assignment (paired with an optional type) to the refresh loop. The asynchronous function will need to have an (err, res) callback.

Cache#refresh([type, ] key, func)

When key-value assignment previously subscribed to a refresh handler, performs the refresh action immediately (instead of waiting for the refreshInterval to expire). func is a callback(err, res) containing the result of the refresh action.


npm test