订阅过期后无法获取key的值

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

我有一个浅密钥,它应该会过期,在听完它的过期后,我取出密钥,生成保存真实值的密钥并尝试获取它的值。

代码:

//.: Set the config for "notify-keyspace-events" channel used for expired type events
listener.send_command('config', ['set','notify-keyspace-events','Ex']);

// __keyevent@0__:expired is the channel name to which we need to subscribe, 0 is the default DB
listener.subscribe('__keyevent@0__:expired');
listener.on('message', (chan, msg) => {
  listener.get(`${msg}-details`, redis.print);
});

运行listener.get后出现以下错误:

ReplyError:在此上下文中仅允许 ERR (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT

我需要真正的密钥值。

node.js redis node-redis
2个回答
2
投票

SUBSCRIBE
命令中所述

一旦客户端进入订阅状态,则不应该 发出任何其他命令,除了附加的 SUBSCRIBE、PSUBSCRIBE、 取消订阅、PUNSUBSCRIBE、PING 和 QUIT 命令。

通常的模式是您将有两个客户端连接(您将调用

redis.createClient()
两次)。下面是一个例子:如何用节点接收Redis过期事件?

基本上,您将拥有一个用于过期事件的连接,以及一个用于您想要的其他逻辑(获取键值等)的连接。


0
投票

基本上,您必须创建另一个侦听器才能获取该值。您无法使用侦听器作为发布和订阅的侦听器来获取它。这是一篇快速文章,解释了我如何解决类似的错误:https://blog.stackademic.com/resolving-redis-error-in-node-js-a549308df2d3

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