商城订单超过 30 分钟未支付自动取消订单,最佳解决方案是怎样?

2017-10-13 16:16:37 +08:00
 herozw

如果用定时任务设置一个每秒执行的脚本,那样可能影响服务器性能。

33937 次点击
所在节点    PHP
73 条回复
Azmeont
2017-10-13 16:17:18 +08:00
查询订单状态时检查是否超时
hging
2017-10-13 16:18:25 +08:00
创建订单的时候 创建一个 30 分钟后执行的异步任务 如果支付成功取消这个任务 如果没有支付 就会自动执行。
whileFalse
2017-10-13 16:19:10 +08:00
定时任务每分钟呢?
reus
2017-10-13 16:22:25 +08:00
怎么影响性能?
WuwuGin
2017-10-13 16:23:41 +08:00
提出一个推测的建议:因为最早之前 steam 上支付卡单,支付后显示 pending。最终都是整点到库(听说是 union pay 的锅)。所以我感觉都是整点检测吧,或者定一个时间段。
herozw
2017-10-13 16:26:20 +08:00
@whileFalse 因为倒计时是按每秒计算。
herozw
2017-10-13 16:27:31 +08:00
@Azmeont 我也是这么考虑的
Felldeadbird
2017-10-13 16:29:22 +08:00
1.cron
2.用户进入订单或者后台客服进行订单操作时进行过期处理。

不要担心服务器性能。服务器性能是用来消耗的。
wangxn
2017-10-13 16:29:25 +08:00
不用定时啊,只要客户重新查看这个订单,假如超时了,那么就做相应处理,假如一年都不访问,那就一直保持未超时的状态。
Millyn
2017-10-13 16:29:50 +08:00
生成订单时就创建一个过期时间的字段,根据这个字段来判断是否过期。
kaka826
2017-10-13 16:30:03 +08:00
用 redis 被动过期,客户端查询订单就从 redis 里取判断,redis 里的 key 过期,就取消订单
holystrike
2017-10-13 16:30:38 +08:00
首先取消时业务逻辑做好判断
然后另外有个轮询取消任务就可以了
domty
2017-10-13 16:31:00 +08:00
做过类似的。
做个队列一个个按时间丢进去进行,然后开个定时器每隔一段时间从队列头部拿出来一个检查是否到时间,倒了就拿出来改状态更新到数据库。
检查前先去库里检查是否到手动被取消,若已被取消从队列头推出。
hinate
2017-10-13 16:31:07 +08:00
设计一个任务中心,使用延时任务。
b821025551b
2017-10-13 16:31:10 +08:00
要留记录就定时每秒执行,不留记录直接 30 分钟的缓存
justfindu
2017-10-13 16:35:15 +08:00
每分钟执行就可以了 反正都是取消订单, 你还在乎时间延时么. 即使最后一秒他付款了, 那不就是目的么 , 而且退款流程加入队列
zhea55
2017-10-13 16:39:47 +08:00
@Azmeont

我来抬杠了。

一般订单失败,是会给用户发邮件的。如果状态迟迟不更新,用户邮件功能如何实现?
chairuosen
2017-10-13 16:40:44 +08:00
记得微信高可用公众号分享过一个类似文章。
1,每个商品一个定时器还是全局一个定时器。每个商品一个的话,太耗性能。所以全局一个。
2,全局一个定时器怎么知道谁到了时间谁没到。遍历一遍页耗性能。
方案是如果倒计时 30 分钟,精确到 1 分钟,就建 30 个队列,有个游标,1 分钟换下一个队列,新插的放这个队列,然后失效再下一个队列并清空。
qiujin
2017-10-13 16:42:01 +08:00
使用 beanstalkd 这种有延迟任务功能的队列
lepig
2017-10-13 16:48:31 +08:00
@wangxn
1. 客户进入到自己的订单列表,岂不是很多未支付订单
2. 如果客户下了 10 个单超时未支付,那么我们后台管理系统中-订单列表查看的话还要处理一次。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/397392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX