上一题下一题

优惠券服务用 Redis 分布式锁防止重复领取,但发生锁过期后两个请求都完成了发券;你会如何定位问题并补充令牌校验或业务幂等保护?

旗舰版
来源:alibaba中级工程师业务幂等保护Redis分布式锁锁过期库存扣减一致性消息幂等设计
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

我会先明确一点:Redis 分布式锁只能降低并发冲突概率,不能作为发券成功与否的唯一保障。锁过期后两个请求都完成发券,本质上说明业务缺少最终幂等保护。

定位时我会从几个方向排查:

1. 确认锁是否真的提前过期 看加锁时设置的 TTL 是多少; 发券链路耗时是否超过 TTL,比如查券、扣库存、写领取记录、调用三方、发 MQ 等; 是否存在 GC、网络抖动、数据库慢 SQL、线程池排队导致请求执行时间变长。

2. 检查解锁逻辑是否安全 加锁时 value 必须是唯一 token,比如 UUID + 线程标识; 解锁时不能直接 DEL key,必须先判断 value 是否是自己的,再删除; 这个判断和删除要用 Lua 脚本保证原子性。

例如:

```lua if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 en

登录后查看完整内容