我在云函数中使用到了redis,并设置了一些key的24小时过期事件。该如何监听到key过期并触发云函数呢?
我考虑过一个方案:
设置一个定时触发器,每900秒执行一次,云函数内保持redis的连接,用redis的psubscribe/pmessage去监听
不知道这个方案是否可行。
我写了一个demo:
exports.main = async (event, context) => {
try {
process.env.TZ = 'Asia/Shanghai';//时区
context.callbackWaitsForEmptyEventLoop = false;
const { redis: redisUtil } = cache.createRedis()
redisUtil.psubscribe('__keyevent@0__:expired', (err, count) => {
if (err) {
console.error("err", err);
return;
}
console.log(`Subscribed to ${count} channels`);
redisUtil.on('pmessage', async (pattern, channel, key) => {
console.log(`pattern ${pattern} expired`);
console.log(`channel ${channel} expired`);
console.log(`Key ${key} expired`);
// 在这里触发云函数并传递过期的键
const value = await redisUtil.hgetall(key);
console.log(`Value ${value} expired`);
});
});
setTimeout(() => {
console.log("关闭redis");
redisUtil.quit();
}, 900 * 1000);
} catch (error) {
logger.error({
errorName: error.name,
message: error.message,
msg: '监听失败',
});
}
}
但好像监听不到。 redis里的参数也有配置的
请教一下有没有懂这方面的
弃用云函数,自己写后端逻辑。
如果你用定时器 还不如获取所有key,然后遍历每个key的剩余时间