Skip to content

Instantly share code, notes, and snippets.

@stephendeyoung
Created February 12, 2018 09:16
Show Gist options
  • Save stephendeyoung/79910f6e2970ca163f9dd38d51776d6b to your computer and use it in GitHub Desktop.
Save stephendeyoung/79910f6e2970ca163f9dd38d51776d6b to your computer and use it in GitHub Desktop.
ioredis discover newly added nodes
const Redis = require('ioredis');
const _ = require('lodash');
const randomstring = require('randomstring');
const util = require('util');
let redisCluster;
async function createRedisCluster() {
const cluster = new Redis.Cluster([{
port: 30001,
host: '127.0.0.1'
}]);
cluster.on('error', (err) => {
console.error(err, 'Error from Redis');
});
cluster.on('+node', (node) => {
console.log('new node connected')
})
cluster.on('-node', () => {
console.log('node disconnected')
})
cluster.on('node error', () => {
console.log('error occurs when connecting to a node')
})
return new Promise((resolve) => {
cluster.once('connect', () => {
console.log('connected to redis')
resolve(cluster);
});
});
}
const TOTAL_KEYS = 120000;
function generateKeys() {
return _.times(TOTAL_KEYS, n => {
return `device:${randomstring.generate(20)}:${randomstring.generate(20)}`
})
}
const CONNECTED_DEVICES_SET_KEY = 'set:connectedDevices';
async function seedRedis() {
const keys = generateKeys();
await Promise.all(keys.map(key => {
return redisCluster.set(key, 'test');
}))
await redisCluster.sadd(CONNECTED_DEVICES_SET_KEY, keys);
return keys;
}
async function runScript() {
redisCluster = await createRedisCluster();
console.log('seeding redis')
await seedRedis();
setInterval(async () => {
var masters = redisCluster.nodes('master');
await Promise.all(masters.map(function (node) {
return node.keys('*');
})).then(function (keys) {
console.log('keys: ', _.reduce(keys, (length, key) => length + key.length, 0));
});
}, 5000)
}
runScript().then(() => {
console.log('done!')
}).catch(err => {
if (redisCluster) {
redisCluster.quit()
}
return console.error(`Error during running of script: ${util.inspect(err)}`)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment