我在发布消息的 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 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 中的每个键。如果你有很多钥匙,这很糟糕。