数据库并发控制:悲观锁、乐观锁
- 悲观锁:假定并发访问一定会发生冲突,访问资源前直接上锁,其他事务被阻塞,直到锁释放。数据库行排他锁就是典型悲观锁。 优点:数据强一致性,可杜绝超卖;缺点:锁会阻塞其他请求,并发性能差,高并发秒杀场景容易产生锁等待、死锁,吞吐量低。适合写冲突高、强一致性优先、并发量不大的场景。
- 乐观锁:假定并发冲突较少,访问数据时不上锁,提交更新时校验数据是否被其他事务修改,若已被修改则更新失败重试。数据库版本号机制、Redis WATCH 机制都属于乐观锁。 优点:无锁阻塞,并发性能高;缺点:高冲突场景大量请求更新失败,频繁重试消耗系统资源,极端情况出现请求饥饿。适合读多写少、高并发场景,如商品秒杀库存扣减。
- 共享锁(S 锁 / 读锁,悲观锁类别):按锁行为划分的悲观锁。事务加共享锁后,本事务可读资源,不可写;多个事务可同时添加共享锁,读与读之间互不阻塞。但持有共享锁期间,其他事务无法添加排他锁,不能执行写操作。适合多读少写场景。多个事务可同时持有同一数据的共享锁,允许读取但不允许修改(其他事务只能加共享锁,不能加排他锁)。适用于只读操作,保证读取期间数据不被修改。
- 排他锁(X 锁 / 写锁,悲观锁类别):按锁行为划分的悲观锁。事务添加排他锁后,其他事务既不能读,也不能写,同一资源同一时刻仅能存在一个排他锁。秒杀库存扣减这类写操作,需要添加排他锁保证数据独占修改,防止并发写带来的数据不一致。仅一个事务能持有排他锁,持有期间其他事务不能读取也不能修改该数据(既不能加共享锁也不能加排他锁)。适用于写操作,确保数据修改的独占性。
秒杀 Redis 高并发策略
- Redis 预扣库存(核心防超卖):秒杀前将商品库存提前预热加载至 Redis。简单库存递减可使用 DECR 原子命令;复杂的 “库存判断 + 扣减” 业务逻辑采用 Lua 脚本封装,将多步操作合并为原子执行,彻底杜绝并发超卖问题。库存扣减成功后将订单消息送入消息队列异步落库,避免瞬时洪峰直接冲击数据库,大幅降低 DB 压力。
- Redis WATCH 乐观锁(并发一致性控制):通过 WATCH 监听库存 Key,MULTI 开启事务缓存批量命令,EXEC 统一提交事务。若事务执行期间监听的库存 Key 被其他客户端并发修改,则本次事务执行失败,业务层通过重试机制保证数据一致性,实现无阻塞、高并发的乐观并发控制。
- Redis List 消息队列削峰(流量抹平):利用 Redis List 实现简易异步队列,通过 LPUSH 将秒杀成功的订单消息快速写入队列,后端服务通过 BRPOP 阻塞式监听消费,将瞬时超大并发流量转为平稳有序的异步消费流量,实现削峰填谷,有效保护后端服务与数据库。
- Redis 限流(流量防护):基于 Redis 实现令牌桶或漏斗限流算法,在请求入口对秒杀请求进行流量管控,拦截超出系统承载能力的超额流量与无效恶意请求,从源头削减流量压力,保障服务稳定运行。
- 缓存预热(规避冷启动风险):秒杀活动开启前,提前将商品库存、商品详情、活动配置等热点数据批量加载至 Redis 缓存,避免秒杀首波流量因缓存未命中直接击穿数据库,解决缓存冷启动问题。
- Redis 分布式锁 SET NX EX(资源互斥):采用 SET NX EX 命令实现分布式互斥锁,控制库存修改、下单等临界资源的并发访问,有效防止同一用户重复抢单、并发争抢问题。通过设置锁自动过期时间避免死锁,通过唯一标识校验防止误删他人锁,保障分布式场景安全可靠。
- RedLock红锁,RedLock 红锁部署多个独立 Redis 节点,客户端向全部节点申请加锁,半数以上节点加锁成功才算获取锁。解决单节点 Redis 主从切换导致锁丢失的问题,提升分布式锁可靠性;但存在多机时钟漂移风险,运维复杂度更高,性能低于普通 Redis 分布式锁。释放锁需要操作全部节点。解决单节点Redis主从切换锁丢失问题,提升锁的可靠性;缺点是存在时钟漂移风险,性能较低、运维成本更高。高可靠场景可采用RedLock红锁。
缓存三大问题(穿透 / 击穿 / 雪崩)
- 缓存穿透:用户查询缓存和数据库均不存在的无效数据,导致所有请求直接穿透到数据库,极易引发数据库压力过载。对策:增加请求参数合法性校验、缓存空值并设置短过期时间、部署布隆过滤器前置拦截不存在的 Key。
- 缓存击穿:高并发场景下,单个热点 Key 缓存过期失效,海量并发请求瞬间全部打入数据库,造成瞬时 DB 压力陡增。对策:热点数据设置逻辑过期、热点 Key 永不过期;缓存更新时使用分布式互斥锁控制单线程回写缓存。
- 缓存雪崩:大批量缓存 Key 同时集中过期,或 Redis 集群宕机导致整体缓存失效,海量请求全部落库,引发数据库雪崩宕机。对策:给缓存 TTL 增加随机偏移量打散过期时间;搭建 Redis 高可用集群;配置服务熔断降级、多级缓存兜底防护。
posted @
2026-09-26 12:40
zhh
阅读(
27)
评论()
收藏
举报