通过定时任务处理数据缓存

4 篇文章 0 订阅
1 篇文章 0 订阅

上周写了一篇文章Redis缓存与异步请求多个sql的性能问题 ,主要介绍了两种异步提交与redis缓存的性能关系。后来思考了一下,这两种缓存的方式有些愚蠢。因为数据变化机会较大。而通过数据过期的方式和强制删除数据的方式再请求,仍会造成初次请求过慢。
本文主要介绍一种缓存思路。即通过linux的crontab定时任务,每隔一段时间更新缓存数据。这样避免了每次数据过期后请求等待时间长的问题。

后台代码

这里先贴两段请求数据加入redis缓存的代码(这里代码并不重要,只有能给redis加入缓存即可)

$list = MidScheduleStore::find()->select('purpose_delivery')->where(['is_last'=>0])->distinct()->asArray()->all();
        common::redisSet('aj_purpose_delivery',$list,86400);

        $list = MidScheduleStore::find()->select('parent_terminal_type')->where(['is_last'=>0])->distinct()->asArray()->all();
        common::redisSet('aj_parent_terminal_type',$list,86400);

这是一个YII2的orm,大概的意思是从数据库中查到想要的数据后保存到redis中,这里的Redis做了一个简单封装。
到这了加入缓存的代码就已经完成了,确保http能访问到就ok。

crontab代码

linux的crontab定时器也十分简答,只需要两个命令就搞掂啦。
crontab -e 编辑定时器。
crontab -l 查看定时器。
创建一个访问url的定时器只要一行代码就可以了。
比如上面的缓存代码路径为www.baidu.com/cache

*/10 * * * * /usr/bin/curl http://www.baidu.com/cache > /dev/null 2>&1

代码前面的五个星星是配置时间,每隔多长时间请求一次。具体就不说明。
后面“ > /dev/null 2>&1”是为了避免每请求一次系统自动发一封邮件。
当然,直接请求url有一定的风险。推荐的做法是写一个脚本文件,通过定时器去调用这个文件。
说到这里需要强调一个事情,也是当时在办公室讨论有点热烈的问。php是脚本语言,也就是说,安装了php之后是可以通过命令取调用的,无需寄托web服务器。很多时候我们都是通过http的方式去请求php,导致很容易就忽略了php本来是一种脚本语言。
请求脚本文件的方式有点不一样。需要先执行php命令

* * * * * /usr/bin/php -f /root/test.php 

因为系统对于安全性的要求并不高,这里我通过复杂url地址的方式去请求,避免了写原生php。
当然要求再高一点,可以控制IP地址等方式去验证请求。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值