Wordpress的fastcgi cache缓存更新脚本

  1. 1. 清除缓存脚本
  2. 2. 重启缓存更新脚本
  3. 3. crontab任务设置

《解决Fastcgi_cache移动版与Web版缓存混乱问题》写了启用Fastcgi cache后同URL,返回页面内容不同的缓存办法

不过也说了Fastcgi cache缓存更新很蛋疼,除了过期不会自动更新,所以需要自己想办法清除需要更新的缓存

本文办法仅针对wordpress,脚本中路径也需要你根据自己的Nginx设置做部分修改

清除缓存脚本

wordpress主要需要更新的缓存就是提交新评论后的页面缓存,我的方法就是读取nginx日志,找到post请求comments-post.php的来源地址,对这个页面清除缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
# 删除评论后的页面缓存
# author: Joysboy
# date: 2012-01-15
# website: http://xfeng.me

log="/var/logs/xfeng.me.log"
# Nginx logs names
tail -n1 -f $log |while read line
do
echo $line > /tmp/lastline
awk -F\" '{print $2}' /tmp/lastline >/tmp/lastrequest
request=`grep POST|grep "comments-post.php" /tmp/lastrequest`
reval=$?
if [ $reval == 0 ]; then
awk -F\" '{print $4}' /tmp/lastline >/tmp/lastarget
target_url=`awk -F\/ '{print $4}' /tmp/lastarget`
curl http://xfeng.me/nocache/$target_url/ 2>&1 > /dev/null
#路径中nocache请替换为你清除cache的location路径
fi
done

这里还有个问题,如果你的评论分页,可能还会在同一个页面下的comment-page-*缓存也需要更新

不过你要做到把当前页面,和新评论所在评论分页的缓存都清除,有点麻烦,需要保留post请求comments-post.php的来源地址,然后继续匹配到评论后跳转到的评论分页地址,然后再对它清除缓存

不过想这样做的话很麻烦,至少我不想去折腾这个脚本,有个简单粗暴的办法可以快速解决,在找到post请求地址后,直接curl多个地址请求清除缓存,不管那个页面存不存在,例如

1
2
3
curl http://xfeng.me/nocache/$target_url/ 2>&1 > /dev/null
curl http://xfeng.me/nocache/$target_url/comment-page-1 2>&1 > /dev/null
curl http://xfeng.me/nocache/$target_url/comment-page-2 2>&1 > /dev/null

当然,如果你的博客人气太旺,评论分页实在太多,估计这么做也蛋疼了,只能去让脚本能找到跳转后地址了,不过还要处理好在寻找跳转地址时新出现的评论post请求,我现在没这个需求,不折腾了

重启缓存更新脚本

如果你每天0点切日志,可能会导致nginx reopen后,该脚本失效,因为日志已经是个新的了

解决办法也很简单,写个简单的重启脚本,在crontab设置在你日志日切后一分钟运行即可

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
# 重启清楚缓存脚本

pid=($(ps -ef|grep update_cache|grep -v grep|awk '{print $2}'))
for i in "${pid[*]}" ;
do
echo $i
kill $i
done
/bin/bash /home/www/update_cache.sh > /dev/null &

crontab任务设置

crontab如下加入定时任务即可

1
2
3
4
#####每日0点切日志####
0 0 * * * /bin/bash /home/www/cut_log.sh
####重启清楚缓存脚本####
1 0 * * * /bin/bash /home/www/update_cache.sh

每日0点切完日志后重启清除缓存脚本,一切搞定,如果你有更好的办法欢迎推荐

声明: 除非注明,小峰网络遨游记文章均为原创,转载请以链接形式标明本文地址

本博客原创文字只代表本人某一时间内的观点或结论,与本人所在公司没有任何关系。

本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

第三方若用于商业用途的转载,须取得本人授权。

本文作者:

本文地址:http://xfeng.me/wordpress-fastcgi-cache-update/

你可能还对下面文章感兴趣: