高并发秒杀下,如何避免 Redis 分布式锁的坑?

秒杀场景:

优化一:

负载均衡 分布式部署

nginx和Java的springboot gateway 网关

问题:

Java中的锁,只能锁住一个线程,对于分布式情况下,每台服务器都会有一个锁,因为锁是jvm级别的

优化二:

redis分布式锁

通过redis的SetNX实现分布式锁

如果锁住某个key,就会返回true,没锁上就返回false

问题:

用户在请求过程中,如果用户所处的服务器挂掉,那么分布式锁,无法解锁

导致其他请求来,给该key上锁,无法上锁,出现死锁

解决:

给分布式锁设置过期时间

新问题:

如果业务时间长,锁提前释放 ,又会造成超卖的问题

优化三:

1.给锁加长时间,并添加子线程每10秒确认线程是否在线,在线则将过期时间重设

2.给锁加唯一id(uuid)解决处理完释放其他线程的锁的情况

重点:以上优化可以用redis组件redisson来解决实现分布式锁

redisson原理:

问题:

如果redis使用的是 主从复制的模式,有主节点和从节点,设置锁时 只能给主节点设置

如果给主节点设置锁,这时如果主节点突然宕机了,从节点没有同步到这把锁,这是又会出现超卖问题

解决方案:

redisson有一个read lock

保证所有你提供的节点都存储完毕,才相应锁成功

相关推荐
焗猪扒饭3 小时前
redis stream用作消息队列极速入门
redis·后端·go
数据组小组6 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
悟空聊架构12 小时前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL12 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
进击的丸子16 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
NineData1 天前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
回家路上绕了弯1 天前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
IvorySQL1 天前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king1 天前
入门 java 和 数据库
java·数据库·后端
jiayou642 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库