Я использую это
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]])];
})
}
Вы можете использовать этот код для поиска ключей из всего кластера. Для получения дополнительной информации перейдите по ссылке.
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-redisscan
? Он позволяет использовать SCAN
команды в кластерах Redis.
Вам нужно будет собрать каждый соответствующий ключ с помощью обратного вызова. Вот как вы это сделаете (прямо из файла 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();
}
});
Выполните команду $ npm install redis
, чтобы установить redis.
var redis = require('redis'),
client = redis.createClient();
client.keys('*', function (err, keys) {
if (err) return console.log(err);
for(var i = 0, len = keys.length; i < len; i++) {
console.log(keys[i]);
}
});