我正在使用这个
redisManager.redisClient.keys('*example*', function (err, keys) { })
字符串但是它只提供一个redis集群的密钥,我怎么才能得到所有集群的密钥呢?
nimxete21#
你不能使用一个命令获取所有节点的键。你必须获取所有节点的键并合并它们。参考-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]])]; }) }
字符串
flvtvl502#
你试过使用node-redisscan包吗?它允许你在Redis集群上使用SCAN命令。你必须用回调函数收集每个匹配的键。下面是你如何做的(直接从README文件中提取)-
node-redisscan
SCAN
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(); } });
ymzxtsji3#
您可以使用此代码从所有集群中查找密钥。请参阅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] } */ });
qni6mghb4#
不建议在产品模式下使用Keys命令。Redis Docs警告: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); });
camsedfj5#
我从我的C#代码转换了这个。希望它能帮助你。你需要在所有服务器上查询并建立你的键列表。
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); });
oalqel3c6#
运行$ npm install redis命令安装redis。
$ npm install 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]); } });
6条答案
按热度按时间nimxete21#
你不能使用一个命令获取所有节点的键。你必须获取所有节点的键并合并它们。参考-https://github.com/antirez/redis/issues/1962
你可以这样做。
字符串
flvtvl502#
你试过使用
node-redisscan
包吗?它允许你在Redis集群上使用SCAN
命令。你必须用回调函数收集每个匹配的键。下面是你如何做的(直接从README文件中提取)-
字符串
ymzxtsji3#
您可以使用此代码从所有集群中查找密钥。请参阅link了解更多信息。
字符串
qni6mghb4#
不建议在产品模式下使用Keys命令。
Redis Docs警告:KEYS是一个只应在生产环境中使用的命令,应格外小心。当对大型数据库执行时,它可能会破坏性能。此命令用于调试和特殊操作,如更改键空间布局。不要在常规应用程序代码中使用KEYS。如果您正在寻找在键空间的子集中查找键的方法,请考虑使用SCAN或sets。
使用scanStream代替
字符串
camsedfj5#
我从我的C#代码转换了这个。希望它能帮助你。你需要在所有服务器上查询并建立你的键列表。
字符串
oalqel3c6#
运行
$ npm install redis
命令安装redis。字符串