背景介绍:
这个项目是一个微信端的付费问答平台,框架是ThinkPHP。
逻辑和"分答"类似:用户提问了问题“以后房价是什么走势?”,问完问题需要支付相应金额,后台会在24小时内审核问题。审核通过后问题48小时后无人回答就要立刻把用户使用微信支付的钱原路返回去。
现在不太清楚的事情是:
如何能够监控每个问题时间到48小时马上退款呢?
如果使用 Linux 定时每秒执行任务,那这个任务也不可能每秒都访问数据库查询看哪个问题快过期吧?
如果使用
redis
具体应该怎么操作那?
现在的想法是:
在用户提问成功后把问题ID
作为数组下标、问题结束时间end_time
和回答人数answer
写入到 F
缓存(就是一个文件),默认answer
值为0;
在48小时内如果有用户回答,就把F
缓存取出来然后就把对应的下标问题ID
删掉
linux定时器每秒钟访问这个缓存文件?
感激不尽!!!
针对你这个问题,我觉得用场景解决技术的问题会比较恰当,就像12306那样,换种角度去处理,那技术就迎刃而解了。
首先,要精确到秒的问题,用Linux的crontab,每秒去扫表,当量大的话,对服务器性能要求也很高,不建议给自己挖坑,量大,占用内存和CPU,机器扛不住。
其次,是否可以用另外的思路考虑,误差在5-10分钟的到期时间,每隔5-10分钟才去扫描一次,这个大幅度的减少了扫描的次数。因为用户也不会那么在乎精确到秒的资金退回情况,包括现在微信24小时退回,你也不会关注什么时候退回,再说,即使你每秒进行扫描,当量大的话,也是会有很大的延迟,不能实时。
PS:缓存的出现,就是允许数据不用实时地展示。不过,还是针对需求情景,合理的解决。