我要做一个自动退款功能?比如说他付款后三天内容没有人回复他,就自动进入退款流程!但是如何写这个定时任务呢?是每隔一秒钟就去运行PHP脚本还是在mysql内写定时任务?
有几种方案,各有利弊,看看哪种更适合你吧:相关表需要设置好下单时间字段,过期时间字段。第一种:crontab定时任务,执行一个php脚本去扫表,过期时间减去下单时间超过三天的都变更成退款状态。
第二种:使用mysql的定时计划任务,下面是个demo,具体逻辑根据你自己的去写。
create event myevent on schedule at current_timestamp + interval 1 hour (周期或者时间点) do update myschema.mytable set mycol = mycol + 1; (执行的sql)
第三种:使用Redis保存,保存的时候expire过期时间3天即可。
第一种方案优点:简单,代码逻辑改动不大,写好就用缺点:时效性不太好,因为你跑crontab任务肯定是固定的某个时间第二种方案优点:直接mysql搞定,不用其他环节缺点:跟crontab优点类似,另如果你不熟悉mysql计划任务,还需要去熟悉一下第三种方案优点:好用,订单时效性好,而且不用走mysql少一次io缺点:可能逻辑层代码需要加上redis的逻辑,而且持久化策略、HA,主从要做好,不然宕机就悲剧了。
用linux crontab定时任务,隔一段时间运行一次某个固定的php脚本~
写个定时任务,每隔一秒执行一次php脚本。
通过延时消息队列,下单之后进行消息队列的写入任务注册,三天之后进行触发;再写一接口,只是简单判断是否进行退款操作
退款不审核吗?还直接跑脚本,倾家荡产的节奏呀!
有几种方案,各有利弊,看看哪种更适合你吧:
相关表需要设置好下单时间字段,过期时间字段。
第一种:crontab定时任务,执行一个php脚本去扫表,过期时间减去下单时间超过三天的都变更成退款状态。
第二种:使用mysql的定时计划任务,下面是个demo,具体逻辑根据你自己的去写。
第三种:使用Redis保存,保存的时候expire过期时间3天即可。
第一种方案
优点:简单,代码逻辑改动不大,写好就用
缺点:时效性不太好,因为你跑crontab任务肯定是固定的某个时间
第二种方案
优点:直接mysql搞定,不用其他环节
缺点:跟crontab优点类似,另如果你不熟悉mysql计划任务,还需要去熟悉一下
第三种方案
优点:好用,订单时效性好,而且不用走mysql少一次io
缺点:可能逻辑层代码需要加上redis的逻辑,而且持久化策略、HA,主从要做好,不然宕机就悲剧了。
用linux crontab定时任务,隔一段时间运行一次某个固定的php脚本~
写个定时任务,每隔一秒执行一次php脚本。
通过延时消息队列,下单之后进行消息队列的写入任务注册,三天之后进行触发;再写一接口,只是简单判断是否进行退款操作
退款不审核吗?还直接跑脚本,倾家荡产的节奏呀!