私はこのRedis Cluster上で利用可能なすべての鍵を取得するRedisコマンド?
redisManager.redisClient.keys('*example*', function (err, keys) {
})
を使用しています。しかし、それは唯一のRedisクラスターの唯一のキーを提供します。すべてのクラスタからどのようにキーを取得できますか?
私はこのRedis Cluster上で利用可能なすべての鍵を取得するRedisコマンド?
redisManager.redisClient.keys('*example*', function (err, keys) {
})
を使用しています。しかし、それは唯一のRedisクラスターの唯一のキーを提供します。すべてのクラスタからどのようにキーを取得できますか?
1つのコマンドですべてのノードのキーを取得することはできません。すべてのノードのキーを取得してマージする必要があります。 参考 - 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、すべてのノードが別々のデータを提供 –