解密 Redis 助力双 11 背后电商秒杀系统
背景
秒杀的特征
秒杀系统
利用浏览器缓存和CDN抗压静态页面流量
利用读写分离Redis缓存拦截流量
"goodsId_count": 100 //总数
"goodsId_start": 0 //开始标记
"goodsId_access": 0 //接受下单数
利用主从版Redis缓存加速库存扣量
"goodsId" : {
"Total": 100
"Booked": 100
}
local n = tonumber(ARGV[1])
if not n or n == 0 then
return 0
end
local vals = redis.call("HMGET", KEYS[1], "Total", "Booked");
local total = tonumber(vals[1])
local blocked = tonumber(vals[2])
if not total or not blocked then
return 0
end
if blocked + n <= total then
redis.call("HINCRBY", KEYS[1], "Booked", n)
return n;
end
return 0
SCRIPT LOAD
将lua脚本提前缓存在Redis,然后调用 EVALSHA
调用脚本,比直接调用 EVAL
节省网络带宽:redis 127.0.0.1:6379>SCRIPT LOAD "lua code"
"438dd755f3fe0d32771753eb57f075b18fed7716"
redis 127.0.0.1:6379>EVAL 438dd755f3fe0d32771753eb57f075b18fed7716 1 goodsId 1
使用主从版Redis实现简单的消息队列异步下单入库
orderList {
[0] = {订单内容}
[1] = {订单内容}
[2] = {订单内容}
...
}
LPUSH orderList {订单内容}
BRPOP orderList 0
数据控制模块管理秒杀数据同步
文章不错?点个【在看】吧! 👇