秒杀优化—基于 Redis 完成秒杀下单

目标:把秒杀核心逻辑搬到 Redis 层,用 Lua 脚本实现"库存扣减 + 防一人多单"一体化,降低数据库压力。

图片把"异步秒杀"拆成两段:Redis + Lua 做极速判断,后台队列做慢速落库,基于 Redis 完成秒杀下单核心思路。

  1. 入口只做快速校验(Lua 脚本)
  • 先判断库存字段 stock:vid:7 是否大于 0(不足直接返回 1)。
  • 再判断用户 ID 是否已经在 order:vid:7 集合里(已下单返回 2)。
  • 只有同时满足"库存足够、用户未下单"时,才在脚本里原子扣减库存并把用户 ID 加入集合,最后返回 0 表示"通过"。

2.接口立即返回,主流程很快

  • 业务线程拿到 Lua 返回值:0 → 说明抢购成功,可以生成订单任务;非 0 → 直接给用户提示"库存不足"或"已抢过"。
  • 整个过程都在 Redis 内存完成,O(1) 速度,不访问数据库,接口可以承受高并发。

3.异步落库(削峰填谷)

  • 当 Lua 返回 0 时,并不是立刻去数据库扣库存、写订单,而是把"优惠券ID + 用户ID + 预生成的订单ID"塞入阻塞队列或消息队列。
  • 后台消费者线程按队列顺序慢慢处理:真正创建订单、持久化到数据库。这样数据库压力被平滑摊开,避免瞬时崩溃。

因此,基于 Redis 完成秒杀下单的异步秒杀思路就是:

"入口少做事(Redis + Lua 原子校验)、请求线程秒回;重活交给后台队列处理,实现削峰填谷,既防止超卖也保护数据库"。

相关推荐
罗光记13 小时前
《人工智能安全治理研究报告(2025年)发布
数据库·其他·百度·新浪微博
202321336054 刘13 小时前
Linux常用命令分类整理
linux·运维·数据库
Q741_14713 小时前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(2) 作答语言:C/C++ 哈夫曼编码 LRU
c语言·数据库·c++·算法·笔试·哈夫曼编码·哈夫曼树
齐 飞13 小时前
快速删除mysql表中所有数据-TRUNCATE TABLE
数据库·mysql
想摆烂的不会研究的研究生13 小时前
每日八股——Redis(2)
数据库·redis·缓存
optimistic_chen13 小时前
【Redis系列】主从复制
linux·数据库·redis·缓存·中间件·命令行·主从复制
一个天蝎座 白勺 程序猿13 小时前
KingbaseES 处理 PL/SQL 运行时错误全解析:从异常捕获到异常处理的实践指南
数据库·sql·oracle·kingbasees
leo_23213 小时前
表&表结构--SMP(软件制作平台)语言基础知识之三十三
数据库·开发工具·表结构·smp(软件制作平台)·应用系统
C***115013 小时前
Spring TransactionTemplate 深入解析与高级用法
java·数据库·spring
indexsunny14 小时前
互联网大厂Java面试实战:Spring Boot与微服务在电商场景的应用解析
java·spring boot·redis·微服务·kafka·gradle·maven