Redis命令获取Redis集群上的所有可用密钥?

我正在使用这个

redisManager.redisClient.keys('*example*', function (err, keys) { }) 

但是它只能从一个redis集群提供密钥。 我如何从所有群集获取密钥?

Solutions Collecting From Web of "Redis命令获取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]])]; }) } 

你有尝试过使用node-redisscan包吗? 它允许您在Redis群集上使用SCAN命令。

您必须收集与callback每个匹配的关键。 这是你如何做的(直接从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(); } }); 

您可以使用此代码来查找来自所有群集的密钥。 请参阅链接了解更多信息。

  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] } */ });