【问题标题】:Nodejs Redis Scan not returning all itemsNodejs Redis Scan不返回所有项目
【发布时间】:2020-07-16 15:12:35
【问题描述】:

我已经检查了其他相关的回复,我相信我做的一切都是正确的,但是它没有返回所有的密钥,有什么想法可能导致这个问题吗?

我的扫描方法:

module.exports.scan = async(pattern, amountPerScan) => new Promise((resolve, reject) => {


  let cursor = '0';
  let keys = [];
  function scan(){    
    redisClient.scan(cursor, 'MATCH', pattern, 'COUNT', amountPerScan, function(err, reply){
      if(err){
          reject(err);
      }
      cursor = reply[0];
      const keysScan = reply[1];

      if(keysScan.length){
        keys = keys.concat(keysScan);
      }

      if(cursor === '0') {
          return resolve(keys);
      } else {          
          return scan();
      }
    });
  }
  scan();
});

这是我的执行:

      const allItems = [];
      for(let i = 0; i != 100; i++){        
        allItems.push(redisCache.set('abc.'+i, 'test'));
      }
      
      await Promise.all(allItems);

      redisCache.scan('abc.*', '5').then((keys) => {
        console.log(JSON.stringify(keys));
      });

这里是键响应:

["abc.22","abc.91","abc.38","abc.44","abc.61","abc.28","abc.54","abc.13 ","abc.93","abc.99","abc.4","abc.64"]

原本应该是 100 个的元素只有 12 个。

谢谢。

【问题讨论】:

    标签: node.js node-redis


    【解决方案1】:

    愚蠢的错误,我没有在等待电话:

    redisCache.scan('abc.*', '5').then((keys) => {
       console.log(JSON.stringify(keys));
    });
    

    应该是:

    await redisCache.scan('abc.*', '5').then((keys) => {
       console.log(JSON.stringify(keys));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 2017-12-31
      • 2022-12-29
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多