php - Linux每秒定时如何实现不请求数据库的情况下完成任务?

查看:110
本文介绍了php - Linux每秒定时如何实现不请求数据库的情况下完成任务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

背景介绍:
这个项目是一个微信端的付费问答平台,框架是ThinkPHP。
逻辑和"分答"类似:用户提问了问题以后房价是什么走势?,问完问题需要支付相应金额,后台会在24小时内审核问题。审核通过后问题48小时后无人回答就要立刻把用户使用微信支付的钱原路返回去。

现在不太清楚的事情是:

  1. 如何能够监控每个问题时间到48小时马上退款呢?

  2. 如果使用 Linux 定时每秒执行任务,那这个任务也不可能每秒都访问数据库查询看哪个问题快过期吧?

  3. 如果使用 redis 具体应该怎么操作那?

现在的想法是:
在用户提问成功后把问题ID作为数组下标、问题结束时间end_time和回答人数answer写入到 F 缓存(就是一个文件),默认answer值为0;
在48小时内如果有用户回答,就把F缓存取出来然后就把对应的下标问题ID删掉

linux定时器每秒钟访问这个缓存文件?

感激不尽!!!

解决方案

针对你这个问题,我觉得用场景解决技术的问题会比较恰当,就像12306那样,换种角度去处理,那技术就迎刃而解了。
首先,要精确到秒的问题,用Linux的crontab,每秒去扫表,当量大的话,对服务器性能要求也很高,不建议给自己挖坑,量大,占用内存和CPU,机器扛不住。
其次,是否可以用另外的思路考虑,误差在5-10分钟的到期时间,每隔5-10分钟才去扫描一次,这个大幅度的减少了扫描的次数。因为用户也不会那么在乎精确到秒的资金退回情况,包括现在微信24小时退回,你也不会关注什么时候退回,再说,即使你每秒进行扫描,当量大的话,也是会有很大的延迟,不能实时。
PS:缓存的出现,就是允许数据不用实时地展示。不过,还是针对需求情景,合理的解决。

这篇关于php - Linux每秒定时如何实现不请求数据库的情况下完成任务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆