秒杀情况下,用户下单扣除库存创建订单之后,迟迟不付款,时间到了自动取消订单(思路)

秒杀 redis预扣减库存回滚补偿机制---实现最终一致性 最近在搞秒杀抢购业务,考虑到秒杀会频繁扣减库存和回滚库存 ,会占用数据库资源,转而使用了redis做库存预扣减,然后在开发过程中遇到了些问题,发现网络上的redis做最终一致性很垃圾,根本没考虑回滚失败后如何保证预扣减库存的最终一致,我猜想可能是这方面的东西值钱(自卖自夸一下,哈哈),好了,开始正文 问题: 问题是这样出现的,在回滚的的时候,如果服务器重启,而且重启的时候正好是redis更新成功,而修改订单由于mysql事务会自动回滚,幂等也没有记录成功,此时就会出现预扣减库存错乱 实现技术: 一.red 阅读详情

秒杀情况下,用户下单扣除库存创建订单之后,迟迟不付款,时间到了自动取消订单

解决方案1. 使用redis实现

1.下单之后把生成分布式全局唯一id,把订单id放进redis中,设置一个过期时间
2.定义一个redis监听器,监听所有的key,一旦有key过期,就会调用实现的方法

public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {


    @Autowired
    private PayOrderTimeoutService payOrderTimeoutService;


    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }


    /**
     * 针对 redis 数据失效事件,进行数据处理
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        // redis 客户端监听 Redis 16库 每个库对应不同的业务逻辑 前缀 order_timeOut_支付id
        String key = message.toString();//获取到失效的key,根据业务需要对这个key进行处理,例如删除订单,返还库存等操作
        log.info(">key:{}已经过期!<", key);
        Long payId = Long.parseLong(key);
        payOrderTimeoutService.orderTimeout(payId);
    }
}

解决方案2,使用rabbitmq的ttl和死信队列实现
1.创建一个正常队列,绑定一个死信队列,给正常队列设置一个ttl,里面的消息超过这个ttl就会进入死信队列
2.创建订单扣库存之后向正常的队列发送一条消息,消息体是订单对象的json字符串
3.让专门一个消费者监听该死信队列进行消费,消费到的消息说明ttl时间到了,然后把消息里面的订单取消掉

ThinkPHP 5.1商城小程序源码实战:部署、二次开发与经验 在PHP开发与电商系统构建中,框架选型与项目实战能力缺一不可。ThinkPHP作为国内流行的PHP框架,其5.1版本以稳定的核心架构和成熟的生态,成为众多商城系统与小程序后端服务的首选。理解从SPU/SKU商品建模到订单状态机、微信支付回调等核心原理,能显著提升开发者对复杂业务流的掌控力。基于ThinkPHP 5.1打造的商城小程序开源项目,不仅提供完整的前后端代码与后台管理,还覆盖用户登录、商品管理、支付退款、权限控制等全链路流程。对于希望快速上线微信小程序商城或学习企业级PHP工程实践的开发者而言,这类 阅读详情

相关推荐

电商平台每秒100万高并发请求的秒杀系统架构设计和实现

电商项目中,秒杀属于技术挑战难度很大的业务。后台可以发布秒杀商品后或者将现有商品列入秒杀商品,热点分析系统会对商品进行分析,对热点商品做特殊处理。商城会员可以在秒杀活动开始的时间内进行抢购,抢购后可以在线进行支付,支付完成的订单由平台工作人员发货,超时未支付订单会自动取消。 秒杀系统中一共涉及到管理员后台、搜索系统、秒杀系统、抢单流程系统、热点数据发现系统等等。B2B 、B2C商城秒杀商品数据一般都是非常庞大,流量特别高,尤其是双十一等节日,所以设计秒杀系统,既要考虑系统抗压能力,也要考虑系统数据存储和处理能力。秒杀系统虽然流量特别高,但往往高流量抢购的商品为数不多,因此我们系统还需要对抢购热门的商品进行有效识别。 那秒杀系统里面需要解决的问题有哪些呢?1、如何应对海量商品访问?2、热点分析系统该如何设计,实现普通商品和热点商品的实时转换?3、普通商品和热点商品的抢单该如何设计和实现?4、面对海量的订单,我们该如何实现订单生成?5、面对用户超时未支付的订单,我们该如何设计和处理,包括订单信息变更和库存变更等。等等的问题? 本课程将从实战角度带你构建秒杀系统,解决以上我们关注的问题,同时结合实战讲解技术点,让大家在实战中掌握知识点。课程包含JavaEE、微服务、Linux、任务调度、大数据等综合性知识,让大家成为一个综合人才,提高自己的竞争力,为以后跳槽涨薪做好重复准备,机遇来了就能抓住。 课程所用的开发环境为:window10 开发工具:IDEA本课程用到技术:SpringBootSpringCloudMyBatisMySQLFreemark模板引擎BinlogCanalXXL-JOB分布式任务调度NginxLua轻量级脚本语言Flink实时分析KafkaZookeeperRedisOpenrestyMaven等等

cvtColor +内存泄漏

题目不知道怎么取,因为cvtColor并没有产生内存泄漏,但是我由于没有正确使用cvtColor而出现了内存泄漏的问题,所以暂且以cvtColor+内存泄漏为题 1.应用背景 项目中用到cvtColor的地方是需要将灰度图转为3通道的彩色图(实际上转换后仍然为灰色的,但是电脑认为的是3通道的彩色图了) 因此需要用到以下语句 cvtColor(src_img, cvMtxRGB, C

smilebluesky的专栏 6056

订单超时未支付 redis处理未支付订单 redis监听失效的key

应用场景 (举一个商城项目的栗子) 提交订单后, 把订单保存到表后, 也把订单的id放到redis中, 失效时间30分钟, 若30分钟内未付款, 则添加库存, 修改订单状态等等业务逻辑 注入 RedisMessageListenerContainer @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessa.

你走过的路 风都是暖的 1032

自动驾驶开发者必看:nuscenes数据集23类物体标注全解析(附避坑指南)

本文深入解析nuscenes数据集的23类物体标注系统,为自动驾驶开发者提供全面的标注规范解读和实战避坑指南。涵盖多模态数据组织、类别细分规则、属性系统应用技巧以及标注质量验证方法,帮助开发者高效利用这一标杆数据集提升模型性能。

weixin_29041767的博客 254

3.ESP32S3 AP 配网开发实战:HTTP 与 WebSocket 协议实现

本文介绍了基于ESP32S3的AP配网实现方案,通过HTTP协议提供配网网页,利用WebSocket实现双向通信。详细解析了HTTP和WebSocket协议特点,阐述了SPIFFS文件系统存储HTML网页的方法,包括分区表配置、CMakeLists设置和代码实现。工程采用模块化设计,包含WiFi管理、Web服务器、IO扩展等组件,支持手机浏览器直接配网。测试验证了从AP热点连接到路由器切换的全流程,并总结了SPIFFS操作、WebSocket通信等核心优化点。该方案无需专用APP,适合物联网设备快速部署场景

u011697185的专栏 957

通过Redis增减库存避坑

不论这个key是否存在都先加一,然后判断其过期时间是否为永不过期,如果是永不过期则说明是新生成的key,给它设置过期时间即可,如果非永不过期则无需操作。原因是: 因为redis的incr操作,当key不存在时, 会生成这个key并将值初始化为0, 并且默认设置key的有效时间为永久。场景1:我们缓存了一个商品的库存,过期时间为5分钟,根据用户的购买和取消执行 incr、decr 操作。两种场景编码看似都没有问题,但实际运行中却发现redis中有一些key变成了永不过期的key,而且值不正确。

growing1224的博客 1399

antdv-<a-form>的使用

是 Ant Design Vue 中用于创建表单的组件,提供了一种结构化的方式来收集用户输入。它支持多种布局、验证、数据绑定等功能,非常适合用于处理用户输入和提交数据。

2302_81312344的博客 2617

Redis解决库存超卖问题

商品服务的库存变化时,通过MQ通知订单服务库存变化。

诗和远方,代码和你 4354

IO Virtualization with Virtio.part 2 [十三]

通过对virtio_device_id 中的 device 和 vendor 的值进行比较,我们找到对应的 virtio 驱动,由于这里我们使用 i2c virtio 为例,所以调用 virtio_i2c_probe 进行 virtio i2c 设备的初始化。在和 virtio mmio 设备交互时我们会读取 VIRTIO_MMIO_DEVICE_ID 和 VIRTIO_MMIO_VENDOR_ID,并将其值写入 virtio_device_id 中,这个就会用作后面和 virtio 设备驱动的匹配参数。

cxjczy1990的博客 1211

TGRS 2026 即插即用 | 注意力篇 | SCFM:双向交叉显著性引导注意力,高层语义与低层细节的双向互补!

本文介绍了MPCNet中的语义引导交叉注意力融合模块(SCFM),该模块通过双向交叉显著性引导机制实现跨尺度特征融合。SCFM创新性地结合了高层语义和低层细节的互补信息,通过轻量局部空间注意力预增强和坐标注意力全局融合引导,显著提升了红外小目标检测的精度。实验表明,SCFM在多个数据集上达到SOTA性能,同时保持轻量高效的计算特性,支持端侧设备部署。 SCFM的核心贡献包括: 双向交叉显著性引导机制,实现语义与细节的互补融合 轻量局部空间注意力预增强模块,计算量仅为传统方法的1/10 坐标注意力全局融合引导

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 145

电商订单技术方案梳理-续

原来简单的整理一下订单业务,但是下面的评论网友望我参看 http://jblog.top/article/details/255453看了之后我又突发感想,再作一篇续。作续的目的,是将之前没有理清楚的再理一理。对于高并发情况下的电商下订单,需要解决的技术难点,主要集中在如下几个方面: 1.如何扣减库存; 2.如何写入订单; 3.如何完成支付,这个太复杂,不展开了下面我

snoopy 2108

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

在人工智能的浪潮中,大型语言模型(LLMs)正逐渐成为研究和应用的热点。它们在自然语言处理(NLP)的各个领域,如文本生成、翻译、问答等任务中展现出了卓越的能力。Qwen2-7B模型,作为该领域的佼佼者,不仅因其庞大的参数量和强大的表示能力受到关注,更因其在微调后能够更好地适应特定任务而备受关注。本文将详细介绍如何利用LLaMA-Factory这一高效的微调框架对Qwen2-7B进行微调,以期达到提升模型在特定任务上的表现。

寻道AI,探索AI无限可能! 2万+

一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。

秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目,提交PR,提高竞争力。早日上岸,升职加薪。总体来说,秒杀系统是十分复杂的,我们要根据自身的情况,选择合适的架构。这篇文章比较系统的介绍了秒杀场景中常见的问题和解决方案。咱们再回顾一下开篇的思维导图:负载均衡,分而治之。通过负载均衡,将不同的流量划分到不同的机器上,每台机器处理好自己的请求,将自己的性能发挥到极致。这样整个系统的性能也就达到最高了。合理使用并发。

王中阳讲编程 6851

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

订单24小时未支付,退还库存等信息的做法-- redis的做法

思路:一般是下单的时候,已经减去库存等信息,就在下单的地方,我们把订单id 和 addtime 组合放在redis队列里面,我们读取队列的时候,list 分割下单时间与当前的时间对比,若是超了24小时就操作对应的订单的操作。区别:下单数多的时候,第一种消耗的资源大些,查询速度就慢。第二种,借用Reids优势,执行的速度快,节省了mysql的开销。方法一:没有借用别的技术,就是查询出来未付款的订单,遍历方式是还原库存、优惠券等的问题。方法二:借助redis优势,开始的找到对应的订单,对其操作。

行走天下 671

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

秒杀结束后,如何对未支付订单进行处理?

秒杀结束后,通常会有一些用户提交了订单但尚未支付的情况。对于这部分未支付的订单,商家一般会设置一个时间限制(如15分钟或30分钟内完成支付),超过这个时间限制,订单就会被视为超时并自动取消。取消未支付订单可以释放被锁定的商品库存,使其他用户有机会购买。

长风破浪会有时的博客 948

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java实现订单未支付失效_Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单...

摘要:本篇博文是“Java秒杀系统实战系列文章”的第十篇,本篇博文我们将采用RabbitMQ的死信队列的方式处理“用户秒杀成功生成订单后,却迟迟没有支付”的情况,一起来见识一下RabbitMQ死信队列在实际业务环境下的强大之处!内容:对于消息中间件RabbitMQ,Debug其实在前面的篇章中已经简单分享介绍过了,在这里就不再赘述了!在本文我们将采用RabbitMQ的死信队列实现这样的业务需求:“...

weixin_39924307的博客 865

【Java】高并发下如何防止库存超发

三种方案,如何防止高并发下的库存超发

人生苦短,我用python 6841

关于电商库存扣减的解决方案

电商中很常见的就是库存扣减的问题了,那么究竟有哪些解决方案以及各自的优缺点呢?一共总结有几种方式。

洛雪 7217

借助Redis锁,完美解决高并发秒杀问题

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

2401_83329718的博客 1024

秒杀场景避免超卖和少卖的思路

秒杀场景下,避免超卖(即售出的商品数量超过实际库存)和少卖(即未能售出所有库存的商品)是电商平台技术设计的重要考虑。

龙大的博客 3147

Redis分布式锁实现解析 - 结合秒杀业务

1.2. 获取事务的代理对象,防止事务的失效,同时暴露代理对象解决超卖问题:认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。例如SynchronizedLock都属于悲观锁乐观锁:认为线程安全问题不一定会发生,因此不加锁,只是在更新数据时去判断有没有其它线程对数据做了修改。如果没有修改则认为是安全的,自己才更新数据。如果已经被其它线程修改说明发生了安全问题,此时可以重试或异常。分布式锁: 使用setnx 实现 多jvm 的锁监视器,(多进程可见)

weixin_65550740的博客 977

秒杀未支付java_Java秒杀系统实战系列~定时任务补充处理超时未支付的订单

摘要:本篇博文是“Java秒杀系统实战系列文章”的第十一篇,本篇博文我们将借助定时任务调度组件来辅助“失效超时未支付的订单记录”的处理,用以解决上篇博文中采用“RabbitMQ死信队列失效处理超时未支付的订单”的瑕疵!内容:上篇文章我们介绍了如何采用消息中间件RabbitMQ的死信队列失效处理超时未支付的订单,实战完毕之后,相信各位小伙伴对死信队列应该有了一个初步的认识以及使用。在该业务场景中,虽...

weixin_42521276的博客 571

Java秒杀系统实战系列~定时任务补充处理超时未支付的订单

摘要:本篇博文是“Java秒杀系统实战系列文章”的第十一篇,本篇博文我们将借助定时任务调度组件来辅助“失效超时未支付的订单记录”的处理,用以解决上篇博文中采用“RabbitMQ死信队列失效处理超时未支付的订单”的瑕疵!内容:上篇文章我们介绍了如何采用消息中间件RabbitMQ的死信队列失效处理超时未支付的订单,实战完毕之后,相信各位小伙伴对死信队列应该有了一个初步的认识以及使用。在该业务场景中,虽...

weixin_30729609的博客 1131

电商高并发的解决方案之秒杀业务

在电商中,商品秒杀是比较常见的业务场景。在这种场景下,系统需要面对高强度的访问,同时还要处理验证用户资格和商品库存等复杂业务逻辑,那我们应该如何应对这种高并发且需要处理复杂业务逻辑的场景的呢?这便是本文探讨的问题。

fgba的博客 5070

秒杀解决方案思路和步骤

文章目录思路(核心思想)步骤秒杀商品数据库设计 思路(核心思想) 秒杀技术实现核心思想是运用缓存减少数据库瞬间的访问压力!读取商品详细信息时运用缓存,当用户点击抢购时减少缓存中的库存数量,当库存数为0时或活动期结束时,同步到数据库。 产生的秒杀预订单也不会立刻写到数据库中,而是先写到缓存,当用户付款成功后再写入数据库。 步骤 商家提交秒杀商品申请,录入秒杀商品数据,主要包括:商品标题、原价、秒杀...

baidu_21349635的专栏 911
上一篇: centos集群上设置ssh免密登陆
下一篇: springboot配置knife4j
livel_java
博客等级 码龄9年 2916粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值