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

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

相关推荐
广州灵眸科技有限公司12 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手15 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学15 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
二宝哥16 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
wWYy.16 小时前
分布式:数据复制
分布式
oradh17 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898618 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD18 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo18 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward19 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php