cache service to share data across workers/master
cache
varcache=require('cluster-cache').use('cache-name',{'persist': true,//default false'expire': 60000//in ms, default 0, meaning no expiration});keys
varcache;//assume the cache is in use as abovecache.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 runlisten({'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 didrequire('cluster-cache').enable();get- with the loader, if concurrent
gethappens across the workers in a cluster, only one will be allowed to load while the rest will be in factwatchtill that one finishes loading. - this will reduce the stress upon the backend services which loads exact same data nicely
varcache;cache.get('cache-key-1',//key must be stringfunction(){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
varcache;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
varcache;cache.del('cache-key-1',//key must be string{'wait': 100//this is a timeout option}).then(function(value){//the old value deleted});watch
varcache;cache.watch('cache-key-1',//key must be string or null (indicating watch everything)functionwatching(value,key){//this is a callback which will be called anytime the associatd key has an updated value});unwatch
varcache;cache.unwatch('cache-key-1',watching);//stop watching