高并发秒杀下,如何避免 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

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

相关推荐
weixin_4045512427 分钟前
自动化数据库理解:用 AI 与 LLM 自动推断表的用途与关系
数据库·人工智能·自动化
java1234_小锋29 分钟前
【技术专题】Mysql8 数据库 - Mysql8 简介 & 安装以及配置
数据库·mysql
oradh33 分钟前
Oracle固定执行计划的方法----SQL Profie(三)
数据库·sql·oracle
测试学习test1 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
仍然.1 小时前
RabbitMQ---可靠性传输
网络·分布式·rabbitmq
做运维的阿瑞2 小时前
mysql数据库分组查询:GROUP BY 与 HAVING 的执行逻辑
数据库·sql·mysql
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-10-01
数据库·人工智能·深度学习·神经网络·搜索引擎
阳光九叶草LXGZXJ2 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
ha_lydms2 小时前
MaxCompute中JSON函数
大数据·数据库·阿里云·json·dataworks·maxcompute·odps
天衍四九-3 小时前
Docker Compose企业实战系列(四):Redis生产级部署|密码加固、持久化、内存优化完整方案
redis·docker·容器