零停机时间的平面文件缓存


Flat file caching with zero downtime

每次新内容发布到我的网站时,我都会为网站的前5页重新生成平面文件缓存。

问题是每次重新生成文件缓存时,我都看到流量略有下降,可能是因为浏览该网站的约2500人中有一些很小但不可忽略的百分比看到了一半生成的页面。

我想知道在php中生成这些缓存页面的更好方法是什么,而不会有用户看到半写页面的风险。

编辑:

这是我的。htaccess文件中决定是否加载缓存文件的部分:

RewriteCond %{HTTP_COOKIE} (user)
RewriteRule (.*)? - [S=3] # Skip the below 2 lines if the above test passes
RewriteRule ^$ app/webroot/cache_static_html/cache_static_popular_results_1.php [L]
RewriteRule ^popular/page:([2-9])$ app/webroot/cache_static_html/cache_static_popular_results_$1.php [L]

Symfony在清除缓存时也会遇到同样的问题。为了避免这个问题,我们预热了缓存。考虑以下内容:

  • 创建临时目录(确保设置正确的权限):cache_temp

  • 添加代码来识别触发器。如果触发器可用,将缓存目录设置为cache_temp(而不是cache_current)。示例触发通过http: http://mydomain.com?prewarm=1

  • 代码将知道在cache_temp而不是cache_current中生成所有缓存文件

  • 将cache_current重命名为cache_old

  • 将cache_temp重命名为cache_current

  • 删除cache_old

我建议使用memcache解决方案。似乎你可以编写你的缓存相当快,而不必使用平面文件方法。去记忆!