我正在使用这个
redisManager.redisClient.keys('*example*', function (err, keys) {
})
但它只能提供来自一个 Redis 集群的键。我该如何获取所有集群的键?
我正在使用这个
redisManager.redisClient.keys('*example*', function (err, keys) {
})
但它只能提供来自一个 Redis 集群的键。我该如何获取所有集群的键?
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
包了吗?它允许您在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();
}
});
不建议在生产模式下使用Keys命令。
来自Redis文档 警告:将KEYS视为一种只应在生产环境中极其谨慎使用的命令。当针对大型数据库执行时,它可能会破坏性能。此命令旨在用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用KEYS。如果您正在寻找在键空间子集中查找键的方法,请考虑使用SCAN或sets。
请改用scanStream
redisConnection = redisConnectionObject;
const slaves = redisConnection.nodes("slave");
config.info('number of slaves', slaves.length)
let keys = [];
let slavePromises = [];
slaves.forEach((slave) => {
let slaveCreate = new Promise((resolve) => {
const stream = slave.scanStream({
match: prefix
});
stream.on("data", (resultKeys) => {
keys = [...keys, ...resultKeys];
});
stream.on("end", () => {
resolve();
});
});
slavePromises.push(slaveCreate);
});
Promise.all(slavePromises).then(([slaveOneData, slaveTwoData]) => {
keys = _.uniq(keys);
resolveOne(keys);
});
const Redis = require('ioredis');
async function getKeyList(servers, pattern) {
const keyList = [];
for (const server of servers) {
if (!server.isConnected) continue;
const keys = await server.keys(pattern);
if (keys.length === 0) continue;
keyList.push(...keys);
}
return keyList;
}
// Example usage:
const servers = [
new Redis({ host: 'server1', port: 6379 }),
new Redis({ host: 'server2', port: 6379 }),
// Add more server configurations as needed
];
const pattern = 'your_pattern_here';
getKeyList(servers, pattern)
.then((keyList) => {
console.log('Keys:', keyList);
})
.catch((error) => {
console.error('Error:', error);
});
$ 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]);
}
});