cluster-cache

0.5.0-SNAPSHOT.1388759957720 • Public • Published

cluster-cache

cache service to share data across workers/master

  • cache
var cache = require('cluster-cache').use('cache-name', {
  'persist': true,//default false
  'expire': 60000 //in ms, default 0, meaning no expiration
});
 
  • keys
var cache;//assume the cache is in use as above
 
cache.keys({
  'wait': 100//this is a timeout option
})
.then(function(keys){
//the keys resolved is an array of all cached keys:string[] from the cache-manager's view
});
 
//to use the cache, we assume u've started the cluster2 with caching enabled, and you can select how cache manager should be run
listen({
 
  'noWorkers': 1, //default number of cpu cores
    'createServer': require('http').createServer,
    'app': app,
    'port': 9090,
    'monPort': 9091,
    'debug': { //node-inspector integration
        'webPort': 9092,
        'saveLiveEdit': true
    },
    'ecv': {
      'mode': 'control',
      'root': '/ecv'
    },
    'cache': {
        'enable': true,//true by default
        'mode': 'standalone'//as a standalone worker process by default, otherwise will crush with the master process
    },
    'heartbeatInterval': 5000 //heartbeat rate
})

Note that, we allow you to use caching w/o cluster2, if you want to enable caching from none cluster2 runtime, the feature could be enabled via:

 
//you can use this in unit test too as we did
require('cluster-cache').enable();
 
  • get
  • with the loader, if concurrent get happens across the workers in a cluster, only one will be allowed to load while the rest will be in fact watch till that one finishes loading.
  • this will reduce the stress upon the backend services which loads exact same data nicely
var cache;
 
cache.get('cache-key-1', //key must be string
  function(){
    return 'cache-value-loaded-1'; //value could be value or promise
  },
  {
    'wait': 100//this is a timeout option
  })
  .then(function(value){
    //the value resolved is anything already cached or the value newly loaded
    //note, the loader will be called once and once only, if it failed, the promise of get will be rejected.
  },
  function(error){
  
  });
  • set
var cache;
 
cache.set('cache-key-1', //key must be string
  'cache-value-loaded-1', //value could be any json object
  {
    'leaveIfNotNull': false,//default false, which allows set to overwrite existing values
    'wait': 100
  })
  .then(function(happens){
    //the happens resolved is a true/false value indicating if the value has been accepted by the cache manager
  },
  function(error){
  
  });
  • del
var cache;
 
cache.del('cache-key-1', //key must be string
  {
    'wait': 100//this is a timeout option
  })
  .then(function(value){
    //the old value deleted
  });
  • watch
var cache;
 
cache.watch('cache-key-1', //key must be string or null (indicating watch everything)
  function watching(value, key){
    //this is a callback which will be called anytime the associatd key has an updated value
  });
  • unwatch
var cache;
 
cache.unwatch('cache-key-1', watching);//stop watching

Versions

Current Tags

Version History

Package Sidebar

Install

npm i cluster-cache

Weekly Downloads

1

Version

0.5.0-SNAPSHOT.1388759957720

License

none

Last publish

Collaborators

  • inexplicable
  • huzhou
  • dimichgh