

ioredis にて、クラスタの複数ノードにコマンドを送信したいと考えています（flushallやkeysなど）。

以下の資料を確認し、Cluster#nodes で取得したノードリストにより処理を行おうと思ったのですが、Cluster#nodes
を呼び出すと空配列が返ってくるため処理を続行することができません。  
<https://github.com/luin/ioredis/blob/master/README.md>  
「Running commands to multiple nodes」の項目

いったんノードリスト確認のため、以下のようなソースコードでテストしています。

[code]

    var Redis = require('ioredis');
    
    var cluster = new Redis.Cluster([{
      host: '127.0.0.1',
      port: 7000
    }, {
      host: '127.0.0.1',
      port: 7001
    }, {
      host: '127.0.0.1',
      port: 7002
    }]);
    
    console.log(cluster.nodes());
    
[/code]

クラスタを出力してみると以下のような状態で、nodes に値が入っていませんでした。

[code]

    Cluster {
      domain: null,
      _events: {},
      _eventsCount: 0,
      _maxListeners: undefined,
      slots: [],
      retryAttempts: 0,
      delayQueue: DelayQueue { queues: {}, timeouts: {} },
      offlineQueue: 
       Denque {
         _head: 0,
         _tail: 0,
         _capacityMask: 3,
         _list: [ <4 empty items> ] },
      isRefreshing: false,
      connectionEpoch: 1,
      options: 
       { showFriendlyErrorStack: false,
         clusterRetryStrategy: [Function: clusterRetryStrategy],
         enableOfflineQueue: true,
         enableReadyCheck: true,
         scaleReads: 'master',
         maxRedirections: 16,
         retryDelayOnFailover: 100,
         retryDelayOnClusterDown: 100,
         retryDelayOnTryAgain: 100,
         slotsRefreshTimeout: 1000,
         slotsRefreshInterval: 5000,
         dnsLookup: [Function: lookup] },
      scriptsSet: {},
      startupNodes: 
       [ { host: '127.0.0.1', port: 7000 },
         { host: '127.0.0.1', port: 7001 },
         { host: '127.0.0.1', port: 7002 } ],
      connectionPool: 
       ConnectionPool {
         domain: null,
         _events: 
          { '-node': [Array],
            '+node': [Array],
            drain: [Function],
            nodeError: [Function] },
         _eventsCount: 4,
         _maxListeners: undefined,
         redisOptions: undefined,
         nodes: { all: {}, master: {}, slave: {} },
         specifiedOptions: {} },
      subscriber: 
       ClusterSubscriber {
         connectionPool: 
          ConnectionPool {
            domain: null,
            _events: [Object],
            _eventsCount: 4,
            _maxListeners: undefined,
            redisOptions: undefined,
            nodes: [Object],
            specifiedOptions: {} },
         emitter: [Circular],
         started: false,
         subscriber: null },
      status: 'connecting' }
    
[/code]

何か間違えている処理、不足している処理などがありましたらご教示頂けたらと思います。


CC BY-SA 4.0
2019-05-28T09:22:32.117
55315
2020-09-26T21:04:00.400
34507
question
redis
ioredis クラスタの複数ノードへのコマンド送信


以下のような対応でノード情報を取得することができるようになりました。

[code]

    var Redis = require('ioredis');
    
    var cluster = new Redis.Cluster([{
      host: '127.0.0.1',
      port: 7000
    }, {
      host: '127.0.0.1',
      port: 7001
    }, {
      host: '127.0.0.1',
      port: 7002
    }]);
    
    //console.log(cluster);
    
    cluster.on('connect', () => {
      console.log(cluster);
    });
    
[/code]


CC BY-SA 4.0
2019-06-07T09:39:33.773
55614
2019-06-07T09:39:33.773
34507
55315
answer