Heim  >  Artikel  >  Backend-Entwicklung  >  倒计时n个小时候修改订单状态,这种逻辑是如何实现的?

倒计时n个小时候修改订单状态,这种逻辑是如何实现的?

WBOY
WBOYOriginal
2016-07-06 13:51:44998Durchsuche

是在服务器设置一个定时执行的程序?
还是每次访问这个页面的时候发现超过时间后再修改?

回复内容:

是在服务器设置一个定时执行的程序?
还是每次访问这个页面的时候发现超过时间后再修改?

我觉得没必要去实时更新,类似这种的问题我认为更好的办法是在创建订单的时候记录一个过期时间,那么在读取这个订单的时候只要判断这个时间戳就可以达到验证是否到期以及当前状态是否可以继续操作的目的了,定时任务之类的并不是什么好的策略,先不说你用php来跟系统层级交互效率如何,但就这中间程序异常的风险就不是很可控,另外订单量大的情况下对于服务器的负载也是很高的

按照你的逻辑还是用定时脚本,不然的话每次访问的时候去改不是实时的不说,效率还低。

可以用linux系统的计划任务,这样可以不用循环

如果你浏览器端没有用到websocket的话,有访问时再处理是否过期即可;
如果用到了websocket,那还是老老实实的cron跑起来吧~
看具体业务场景要求了

你说的是类似如果没有15分钟没有付款取消订单的功能吧?我没做过,所以只能说一下想法。生成订单时PHP调用系统功能操作创建一个15分钟后执行的任务就行了,任务语句动态生成,例如 php -f checkOrderStatus.php -id 323003
checkOrderStatus.php里面同样用系统功能把这个定时任务删掉(如果有一次性定时任务就不用费事了,我其实不懂Linux,用的时候才搜资料)就行了。
至于 @accyl 提到负载问题倒是不用太担心,因为这个功能不走web service,所以执行该文件必然比创建一个订单开销要小很多很多,订单都能处理这个就更没问题了。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn