如题,这是一个司空见惯的订单功能,似乎每个产品经理都会下意识地这么设计,可是为什么呢?
1. 假设没有超时自动取消,会导致部分订单永远停留在“待支付”;
2. 假设部分订单永远停留在“待支付”,会导致部分用户随时可对很久之前的订单进行支付;
3. 假设部分...进行支付,会导致部分支付失败(如商品已经下架或价格变更);
综上所述,对用户体验不好,还有没有其他硬核原因导致待支付订单必须超时自动取消呢?
创建订单时将订单信息加入到内存中的订单队列,每个订单的订单信息都有一个毫秒级的时间,
设计一个线程,每隔一个固定的时间比如(30秒)扫描一遍队列,将超时未支付的订单信息从队列中移除!
订单支付时,先从订单队列中读取订单信息,没超过15分钟的订单则可以进行支付,如不存在于队列中则提示 订单超时取消(支付失败)。
队列中支付成功的订单立即更新状态为已支付,并持久化到数据库订单表,如订单数据持久化成功则从队列中移除,失败则重试几次,记录日志。
未支付的订单不进入数据库。
用户个人中心-》我的订单,将未支付的订单和其它状态的订单分两个部分显示,未支付的订单从后台订单队列中读取,其它状态的订单从数据库订单表中读取显示。
超时未支付的订单过期了就消失了,对数据库没压力;有数据分析需要也可以将支付超时的订单写到超时未支付订单的表里面去。
一分钟就算10万个未支付,数据库毫无压力,支付成功的才是¥¥啊。
有更牛逼的么,不服来辩。