获取与 v4 中的模式匹配的 Redis 键

问题描述 投票:0回答:1

我在发布消息的 Node.js 应用程序中使用 Redis 版本 3。为了发布此消息,我能够获取与值匹配的特定键。现在我已经更新到版本 4,看起来密钥获取部分不再工作,消息也不再发布。这是那段代码:

async myFunction(someData){
console.log(someData) // this is being logged
this.redisClient.keys('REDIS_SUBSCRIBER_SOCKET_CHANNEL_*', (err, ids) => {
      if(err){
        return console.log(err)  // this is not being logged
      }
      console.log('ids: ' + ids);  // this is not being logged
      ids.forEach(id => {
        console.log(
          'Distributing: ' + JSON.stringify(someData),
        );
        this.publisherClient.publish(id, JSON.stringify(someData));
      });
    });
}

我只能认为密钥没有正确获取,但当我的应用程序启动时连接已成功建立。

node.js redis nestjs node-redis
1个回答
0
投票

Node Redis v4 添加了许多重大更改,例如对 Promises 的支持和消除回调。这不是更换的下降。

您有两种选择来完成这项工作。您可以启用传统模式或者您可以更新您的代码。我会推荐后者,但当然明白更新代码并不总是一种选择。

要启用传统模式:

const redis = createClient({ legacyMode: true });

使用异步/等待:

const ids = await redis.keys('REDIS_SUBSCRIBER_SOCKET_CHANNEL_*')

GitHub 存储库上有一个从 v3 迁移到 v4 的指南,链接到我帮助编写的 README,列出了所有重大更改。

顺便说一句,我还建议使用

.scan

 而不是 
.keys
,因为它的性能更好。对 
.keys
 的调用会阻塞用于读取和写入 Redis 状态的单个线程。这意味着在它运行时不会发生任何其他事情。为了让它运行,必须根据此模式检查 Redis 中的
每个键。如果你有很多钥匙,这很糟糕。

© www.soinside.com 2019 - 2024. All rights reserved.