亿级高并发秒杀系统架构:动静分离、Redis Lua 原子扣减与消息削峰实战
系统复盘亿级瞬时流量秒杀系统的分层防护体系:CDN 静态化、网关限流、Redis + Lua 脚本原子预扣库存、RocketMQ 异步落库以及针对数据库行级锁热点更新的库存分桶方案。
-- Redis Lua 脚本:原子预扣减库存与防重复下单
local stockKey = KEYS[1]
local userOrderKey = KEYS[2]
local userId = ARGV[1]
local quantity = tonumber(ARGV[2])
-- 1. 检查用户是否已下单
if redis.call('SISMEMBER', userOrderKey, userId) == 1 then
return -1 -- 已经下过单,防止重复
end
-- 2. 检查剩余库存
local currentStock = tonumber(redis.call('GET', stockKey) or '0')
if currentStock < quantity then
return 0 -- 库存不足
end
-- 3. 原子扣减并记