news 2026/4/29 13:41:24

秒杀系统的幂等,只做一层Redis判重远远不够

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
秒杀系统的幂等,只做一层Redis判重远远不够

面试经常被问到幂等设计,很多人的回答是:用Redis的SETNX做个判重就行了。

这个回答不能说错,但只对了三分之一。

秒杀专栏第15篇写完了,专门讲幂等设计。在实际的秒杀系统中,幂等做一层是扛不住的,我们的方案是三层防护,从外到内:Redis SETNX抢占、数据库唯一索引、业务状态机,三层各管各的范围,缺一层就有漏洞。

先说Redis层。消费端收到消息后,用SETNX原子操作抢占处理权,同一个traceId只有第一个到达的消息能通过,后续重复消息直接跳过。这一层能挡住99%以上的重复请求。但问题是Redis不是万无一失的,宕机恢复后可能丢数据(取决于AOF的fsync策略),SETNX的key可能消失。这时候如果没有第二层兜底,重复请求就穿透到业务逻辑了。

第二层是数据库的唯一索引。在订单表的traceId字段上建唯一索引,即使Redis层漏过了重复请求,数据库的DuplicateKeyException也会阻止重复插入。消费端捕获这个异常后,不当错误处理,而是查询已有订单返回给前端。

第三层是业务状态机。前两层解决的是「不重复创建」,第三层解决的是「重复操作不改变结果」。支付回调来了两次,UPDATE语句的WHERE条件里带了order_status = 0,第一次成功更新,第二次影响0行直接忽略。一条带条件的UPDATE语句就够了,数据库行锁保证原子性。

这篇文章还讲了一个容易被忽视的细节:PROCESSING状态的过期时间设计。设了60秒过期,消费线程崩溃后key会自动过期,允许RocketMQ下一次重试。不设过期时间的话,处理中途崩溃后这条消息就永远无法被重试了。另外还区分了「确定性失败」和「临时异常」的不同处理方式,库存不足用markFail直接标记失败,网络超时用release删除key允许重试。

做了这么多年开发,见过不少线上事故是幂等没做到位引起的。重复扣库存、重复建单、重复发放权益,每一种都是资损。很多人知道要做幂等,但只做了一层就觉得够了。三层各有各的弱点,组合在一起才没有死角。

这个秒杀专栏从需求分析、架构设计到每一行核心代码,覆盖了秒杀系统从0到1的完整链路。不是泛泛地讲概念,而是每个方案背后为什么这么选、不这么做会出什么问题,都讲清楚了。如果你正在做高并发系统、准备面试、或者想系统地学一套生产级的秒杀方案,这个专栏能帮你省掉大量踩坑的时间。订阅专栏,少走弯路。

最近在知乎出了秒杀专栏,感兴趣的可以订阅一下。至于知识星球的,可以搜:

  • 老码头的技术浮生录

它是一个能实际帮你解决难题的星球。有问题的,找知心的Sam哥,支持无限次语音一对一解决你遇到的难题。另外后续我新写的所有对外的付费专栏,在星球内都是免费的,且可以拿到所有源代码。

我的知乎账号:

  • SamDeepThinking
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 13:38:38

RH850 F1开发避坑指南:选项字节配置不当,我的程序怎么都烧不进去?

RH850 F1开发实战:选项字节配置陷阱与看门狗调试全解析 第一次将编译好的程序烧录进RH850 F1系列MCU时,我盯着纹丝不动的调试器界面,后背渗出一层冷汗——JTAG接口毫无反应,仿佛芯片成了一块砖头。这种场景对许多从STM32转向瑞萨平…

作者头像 李华
网站建设 2026/4/29 13:36:29

GetQzonehistory:永久保存QQ空间青春记忆的终极指南

GetQzonehistory:永久保存QQ空间青春记忆的终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经翻看QQ空间里那些承载着青春回忆的说说,却担心它们…

作者头像 李华
网站建设 2026/4/29 13:32:11

PHP V6 单商户常见问题——云编译报SSL证书错误的处理方案

云编译报SSL certificate problem的处理方案 有些小伙伴在云编译的时候会出现 SSL certificate problem 这样的报错,如下图所示: 遇到这个问题,只需要把文件中云服务请求改成http请求即可:niucloud/core/util/niucloud/CloudSe…

作者头像 李华
网站建设 2026/4/29 13:31:26

XUAN-Bike自平衡自行车:AI与机械的完美融合

1. XUAN-Bike自平衡自行车项目概述作为一名长期关注智能硬件开发的工程师,当我第一次看到XUAN-Bike这个项目时,立刻被其巧妙的设计思路所吸引。这个由华为工程师彭志辉(Peng Zhihui)主导开发的自平衡自行车项目,完美融…

作者头像 李华
网站建设 2026/4/29 13:30:37

Cursor Free VIP破解工具:三步解锁AI编程助手无限潜力

Cursor Free VIP破解工具:三步解锁AI编程助手无限潜力 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…

作者头像 李华