Node 使用 Redis 如何处理因异步取值不准确的问题?

查看 90|回复 3
作者:NobodyVe2x   
大概描述一下应用场景:
app.get("/handle-work/:workid", async (req, res) => {
        const workid = req.params.workid;
   
    const work = await client.get(workid);
    if (!work) {
            res.send("The work already done:" + workid);
        return;
    }
   
    // do something sync
   
    // clean redis cache
        await client.del(workid);
   
          res.send("Handle:" + workid);
});
这种写法可能会导致一个 workid 被处理两次。 应该如何避免呢? 谢谢

workid, Work, const, Redis

lsk569937453   
你需要搜索的关键字可能是"redis 分布式锁"
cloud107202   
1. do something sync 这里看下能否设计成幂等的. 偶尔调用端抖动一下请求了两次,无碍
2. 如果 1 不可以,要在 handle 之前对 workid 上锁,这里的锁也可以顺势复用 redis 的能力 https://redis.io/docs/manual/patterns/distributed-locks/
luin   
把 client.get 换成 client.getdel
您需要登录后才可以回帖 登录 | 立即注册

返回顶部