Redisson 分布式锁
2025年4月18日大约 1 分钟
Redisson 分布式锁
为什么要使用分布式锁?
Java中synchronized 和 ReentrantLock 这种锁都是在JVM内存中实现的,锁只能在当前JVM实例内起作用,适用于单机部署的项目。
如果是多机部署项目,每台服务器都有自己的JVM内存,导致设定的锁不能实现共享。
如果同时发起多请求,请求分布在各机器中就会在各个服务器中自己获取锁,达不到多机器共用一把锁控制资源的目的。因此在多台服务器之下(分布式)中依旧会导致并发问题(超卖)。
加锁对象的判定
谁是重点、谁是共享资源、谁可能被争抢,就给谁加锁。谁会被并发访问,就给谁加锁!
- 🔥 秒杀商品: 多人同时下单同一个商品 → 给商品加锁(锁 productId)
控制的是库存,防止超卖!
- 👤 用户仅能一人一单: 一个人可能秒杀多次 → 给用户加锁(锁 userId)
控制的是重复下单!
- 🛒 秒杀某商品只能买一次: 同一个用户不能抢同一商品多次 → 锁 productId + userId 组合键
控制的是“同一用户对同一商品的抢购”
- 📆 任务调度系统: 定时任务只能一个服务器执行 → 锁任务ID
控制的是“同一任务不会被多节点重复执行”
分布式锁解决并发问题
秒杀、抢购(控制库存)
防止重复下单、重复提交
分布式任务调度(只有一个节点执行)
保证同一用户、同一商品等资源在分布式下的互斥访问