收藏
回答

如何监听redis键过期事件?

我在云函数中使用到了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里的参数也有配置的

请教一下有没有懂这方面的

回答关注问题邀请回答
收藏

2 个回答

  • 从君华
    从君华
    2023-05-21

    弃用云函数,自己写后端逻辑。

    2023-05-21
    有用
    回复 1
    • momo
      momo
      发表于移动端
      2023-05-21
      看来是只能这样了
      2023-05-21
      回复
  • Mr.Zhao
    Mr.Zhao
    2023-05-20

    如果你用定时器 还不如获取所有key,然后遍历每个key的剩余时间

    2023-05-20
    有用
    回复 12
    • momo
      momo
      发表于移动端
      2023-05-20
      可是key多的话怎么办。我获取了剩余时间也没用。我要的是当key过期后执行一些操作。
      2023-05-20
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于移动端
      2023-05-20回复momo
      云函数不能常驻后台,监听事件弄不了
      2023-05-20
      回复
    • momo
      momo
      发表于移动端
      2023-05-20回复Mr.Zhao
      所以我是想每900秒定时触发。不知道这样是否可行。或者不知道能不能redis那边有键过期了去触发云函数的运行。
      2023-05-20
      回复
    • momo
      momo
      发表于移动端
      2023-05-20回复Mr.Zhao
      没查到redis相关的文档
      2023-05-20
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于移动端
      2023-05-20回复momo
      每900秒运行一次,那一次刚好有key过期?
      2023-05-20
      回复
    查看更多(7)
登录 后发表内容