redis-client-ch
Version:
use zookeeper mangage redis cluster and write to master and read from slave
64 lines (58 loc) • 1.61 kB
JavaScript
/**
* Created by zhangliming on 14-10-9.
*/
var Client = require('node-redis-failover/lib/client');
var async = require('async');
Client.prototype.setState = function(name, state, callback) {
if (!this.redisState[name]) {
this.watchZkData(name);
}
if (!state) {
callback && callback();
return;
}
this.redisState[name] = state;
var self = this;
async.waterfall([
function (cb) {
if (state.master) {
self.addClient(state.master, state.password, function () {
cb(null, 1);
});
}else{
cb(null, 0);
}
},
function (n, cb) {
if (state.slaves) {
if(state.slaves.length==0){
cb(null,n);
return;
}
var slaveSize=0;
async.eachSeries(state.slaves, function (name, cb1) {
self.addClient(name, state.password, function(){
cb1(null,slaveSize++);
});
}, function (err) {
if(err){
cb(err,-1);
}else{
cb(null,n+slaveSize);
}
});
}else{
cb(null,n);
}
}
], function (err, result) {
if(err){
console.log(err);
return;
}
callback && callback();
});
};
exports.createClient = function(opts) {
return new Client(opts);
};