trafficserver (五)目录正则刷新缓存

贵贵的博客 ( http://blog.linuxphp.org/ ) :

这是什么?

为保证在服务器岩机时有一份缓存可用,在正常情况下能及时刷新缓存内容不至于太旧 为能通过正则表达式来批量清除缓存内容,同时不对整个缓存进行遍历以至于托跨机器 ,关于ats自带的regex_delete测试中发现效率远远不行。

思路是怎样的?

根据用户访问情况来进行缓存更新,如我设置缓存1小时失效,我发现age值超过300(也就是 内容生成超过5分钟)就手动更新缓存,更新时进行后端的状态检查。 对于一些静态资源由于内容基本不会变化,所以跳过自动更新 对于需要人工刷新的页面(如首页), 更新时用缓存内容回写,保证一直是旧内容 目录刷新功能类似,每次取有效期内的规则列表,然后拿用户访问的URL匹配,如果链接 是在生效期前生成的且能匹配上正则更新缓存。

需要如何配置?

除基本配置外,主要是ats的日志格式有要求,参考文件logs_xml.config crontab定时每分钟执行tailAtsLog.sh文件来分析ats日志 要清理的目录可以通过数据库读取,这里为方便解释主业务硬编码到了文件libRegex.php

其它

目录刷新来自于群里人的点拨,最开始是由一个regex_revalidate的插件实现,文章 http://www.ywjt.org/index.php/archives/883给出了具体如何使用。之所以没有采用是 由于本身业务已有监控日志刷新服务,不使用插件可保证业务独立性,可以后台动态添加 刷新目录等原因, 可能唯一问题是第一个访问人访问到的还是旧的,触发刷新后其他人才会 看到新内容,不过这个延迟还是可以接受的。

 

---

代码在github上

文章来源:

Author:linuxphp@qq.com(keminar)
link:http://blog.linuxphp.org/archives/1646/