Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 零停机时间的平面文件缓存_Php_Caching - Fatal编程技术网

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

Php 零停机时间的平面文件缓存,php,caching,Php,Caching,每次新内容发布到我的站点时,我都会重新生成站点前5页的平面文件缓存。这非常有效,并大大降低了服务器负载 问题是,每次重新生成文件缓存时,我都会看到流量略有下降,大概是因为在浏览该网站的约2500人中,有一小部分人看到了生成页面的一半 我想知道在php中生成这些缓存页面的更好方法是什么,而不会让用户看到写了一半的页面 编辑: 以下是my.htaccess文件中确定是否加载缓存文件的部分: RewriteCond %{HTTP_COOKIE} (user) RewriteRule (.*)? - [

每次新内容发布到我的站点时,我都会重新生成站点前5页的平面文件缓存。这非常有效,并大大降低了服务器负载

问题是,每次重新生成文件缓存时,我都会看到流量略有下降,大概是因为在浏览该网站的约2500人中,有一小部分人看到了生成页面的一半

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

编辑:

以下是my.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]

我建议使用memcache解决方案。似乎您可以非常快速地写入缓存,而不必使用平面文件方法。去回忆吧

Symfony在执行清除缓存时也会遭受同样的痛苦。为了避免这个问题,我们对缓存进行了预热。考虑以下事项:

  • 创建临时目录(确保设置正确的权限):cache\u temp

  • 添加代码以识别触发器。如果触发器可用,则将cache dir设置为cache_temp(而不是cache_current)。通过http的触发器示例:

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

  • 将当前缓存重命名为旧缓存

  • 将cache_temp重命名为cache_current

  • 删除旧缓存


在缓冲给用户之前,确保生成内容并对其进行缓存。我使用APC为登录用户缓存部分站点,但对于未登录用户,我跳过加载整个站点框架(cakephp)。在我的htaccess中,我让它检查“用户”cookie是否存在,如果不存在,它将重写为主页的缓存文件。只是为了确保我理解,在开始整个重命名缓存/重命名操作之前,我会将触发器设置为1,然后再将其设置为0,以便在操作进行时知道如何从cache_temp目录加载?你知道我如何在我的htaccess规则中检查触发器吗(请参阅我在主帖子上的编辑以了解我当前的htaccess规则)?这样做的目的是,如果应该为我的框架提供缓存文件,则根本不必加载框架,因此能够在htaccess中处理某些触发器(或者如果缓存文件存在,则文件元数据…)的检查将是理想的。触发器的传递只会让您的代码知道请求了预热,因此,您可以告诉您的框架在cache\u temp dir而不是cache\u curent目录中生成所有缓存文件。这样,所有缓存文件都可用,可以随时使用,这样您就不会在重载情况下提供部分缓存文件。不确定重写规则,我们执行的每个请求都会经过框架,然后框架会确定要使用哪些缓存文件。看起来我可以使用您的方法,在我的htaccess中使用“RewriteCond%{TIME_SEC}<5”这样,当cron作业重新生成缓存文件时,它会从临时缓存加载5秒钟。您能否脱机生成平面文件,然后在页面发生更改的同时将其放置?