我有一个浅密钥,它应该会过期,在听完它的过期后,我取出密钥,生成保存真实值的密钥并尝试获取它的值。
代码:
//.: 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
我需要真正的密钥值。
SUBSCRIBE
命令中所述:
一旦客户端进入订阅状态,则不应该 发出任何其他命令,除了附加的 SUBSCRIBE、PSUBSCRIBE、 取消订阅、PUNSUBSCRIBE、PING 和 QUIT 命令。
通常的模式是您将有两个客户端连接(您将调用
redis.createClient()
两次)。下面是一个例子:如何用节点接收Redis过期事件?
基本上,您将拥有一个用于过期事件的连接,以及一个用于您想要的其他逻辑(获取键值等)的连接。
基本上,您必须创建另一个侦听器才能获取该值。您无法使用侦听器作为发布和订阅的侦听器来获取它。这是一篇快速文章,解释了我如何解决类似的错误:https://blog.stackademic.com/resolving-redis-error-in-node-js-a549308df2d3