牛逼!完美解密Redis与秒杀系统!!!
共 3011字,需浏览 7分钟
· 2022-08-03
点击上方“程序员大白”,选择“星标”公众号
重磅干货,第一时间送达
一、背景
二、秒杀的特征
三、秒杀系统
四、利用浏览器缓存和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
八、数据控制模块管理秒杀数据同步
推荐阅读
关于程序员大白
程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识,欢迎关注[程序员大白],大家一起学习进步!