Redisson 分布式锁在 Redis 中解决接口幂等性的机制是什么?请说明其典型的应用场景以及锁的实现原理。
考察说明
考查对 Redisson 分布式锁底层实现的理解,以及它在接口幂等性场景中的适用边界。
回答思路
- 【回答框架 1】Redisson 分布式锁基于 Redis 的 SETNX 加 Lua 脚本实现,保证加锁和设置过期时间的原子性,锁内操作由 Redis 单线程串行执行,实现互斥。
- 【回答框架 2】接口幂等性不能仅依赖分布式锁,锁只能保证并发下互斥执行,要保证幂等还需唯一请求ID、状态记录、唯一约束或去重表等机制配合。
- 【回答框架 3】Redisson 锁的自动续期机制通过 watchdog 后台线程在锁存在且未释放时定期续期,默认锁超时时间为 30 秒,续期逻辑与 Lua 脚本相关。
- 【回答框架 4】Redisson 锁支持可重入、公平锁、读写锁等变体,适用于秒杀扣减库存、订单重复提交、分布式任务调度等场景,也适用于分布式缓存一致性或数据同步场景。
- 【关键点 1】Redisson 分布式锁底层依赖 Lua 脚本实现原子加锁和释放锁,并处理过期时间设置。
- 【关键点 2】分布式锁只解决互斥,不直接保证幂等;幂等需结合唯一标识、状态记录、唯一约束或去重机制。
- 【关键点 3】watchdog 自动续期避免业务未完成锁过期,但需注意释放锁时校验线程标识以防误删他人锁。
- 【关键点 4】Redisson 锁适用于分布式系统中的资源互斥或并发控制,如库存扣减、订单防重、分布式调度任务。
- 【易错点 1】把分布式锁当作幂等性的充分条件,忽略唯一标识和状态检查,可能导致重复请求仍能执行。
- 【易错点 2】锁未设置超时或未使用自动续期,业务执行时间过长导致锁过期,其他线程可进入临界区。
- 【易错点 3】误用锁的持有者判断,释放锁时不校验线程标识,可能释放他人锁造成并发问题。