redisManager.redisClient.keys('*example*', function (err, keys) {
})
但它只是給出了僅Redis的集羣的一個鍵。我如何從所有羣集獲取密鑰?
redisManager.redisClient.keys('*example*', function (err, keys) {
})
但它只是給出了僅Redis的集羣的一個鍵。我如何從所有羣集獲取密鑰?
使用單個命令無法獲取所有節點的密鑰。您必須爲所有節點獲取密鑰併合並它們。 參考 - https://github.com/antirez/redis/issues/1962
你可以做類似的事情。
var redis = require('redis');
redisConfig = new Array(
{"port": 1234, "host": "192.168.1.2"},
{"port": 5678, "host": "192.168.1.3"}
);
keys = new Array();
allKeys = new Array();
for(i = 0; i < redisConfig.length; i++){
redisClient = redis.createClient(redisConfig[i].port, redisConfig[i].host);
keys[i] = redisClient.keys('*example*', function (err, keys) {
allkeys = [...new Set([...allKeys ,...keys[i]])];
})
}
@Albin Mathew幫助嗎? –
您是否嘗試過使用node-redisscan
包?它允許您在Redis羣集上使用SCAN
命令。
您必須收集每個與回調匹配的密鑰。你可以這樣做(直接從README文件中提取) -
var redisScan = require('redisscan');
var redis = require('redis').createClient();
redisScan({
redis: redis,
each_callback: function (type, key, subKey, value, done) {
console.log(type, key, subKey, value);
done();
},
done_callback: function (err) {
if (err) throw err;
redis.quit();
}
});
您可以使用此代碼來查找所有羣集中的密鑰。有關更多信息,請參閱link。
var RedisCluster = require('node-redis-cluster').RedisCluster;
var rcluster = RedisCluster.create([
{ port: 6379, host: '10.0.0.1' },
{ port: 6379, host: '10.0.0.2' },
{ port: 6379, host: '10.0.0.3' },
]);
rcluster.execAll('keys', ['*'], function(err, results) {
/* results will be
{
'10.0.0.1:6379': [ // keys],
'10.0.0.2:6379': [ // keys],
'10.0.0.3:6379': [ // keys]
}
*/
});
集羣中的所有節點是不是應該共享相同的數據並給出相同的結果?或者我們在這裏談論多個集羣? –
node-redis-cluster可以做到這一點。你可以在這裏查看:https://www.npmjs.com/package/node-redis-cluster – neohope
@john Siu,所有節點給出單獨的數據 –