求高效的缓存类,每秒访问1W次页面,每个页面都不一样,可能是百万级别的,,想试用缓存处理, 服务器扛不住啊,找了一个缓存类,貌似 没解决负载问题。!!!<?php/** * auto_cache.php 实现智能的自动缓存。 * 使用办法极其简单: * 在需要实现缓存功能的页面 require 'auto_cache.php'; 就ok了 * @author [email protected] *///存放缓存的根目录,最好是放到/tmp目录,尤其是虚拟主机用户,因为/tmp目录不占自己的主页空间啊:)define('CACHE_ROOT', dirname(__FILE__).'/cachess');//缓存文件的生命期,单位秒,86400秒是一天define('CACHE_LIFE', 1864000);//缓存文件的扩展名,千万别用 .php .asp .jsp .pl 等等define('CACHE_SUFFIX','.html');//缓存文件名$file_name = md5($_SERVER["HTTP_REFERER"]).CACHE_SUFFIX;//缓存目录,根据md5的前两位把缓存文件分散开。避免文件过多。如果有必要,可以用第三四位为名,再加一层目录。//256个目录每个目录1000个文件的话,就是25万个页面。两层目录的话就是65536*1000=六千五百万。//不要让单个目录多于1000,以免影响性能。$cache_dir = CACHE_ROOT.'/'.$_SERVER['SERVER_NAME'];//缓存文件$cache_file = $cache_dir.'/'.substr($file_name,4);//GET方式请求才缓存,POST之后一般都希望看到最新的结果if($_SERVER['REQUEST_METHOD']=='GET'){ //如果缓存文件存在,并且没有过期,就把它读出来。 if(file_exists($cache_file) && time()-filemtime($cache_file)<CACHE_LIFE) { $fp = fopen($cache_file,'rb'); fpassthru($fp); fclose($fp); exit; } elseif(!file_exists($cache_dir)) { if(!file_exists(CACHE_ROOT)) { mkdir(CACHE_ROOT,0777); chmod(CACHE_ROOT,0777); } mkdir($cache_dir,0777); chmod($cache_dir,0777); } //回调函数,当程序结束时自动调用此函数 function auto_cache($contents) { global $cache_file; $fp = fopen($cache_file,'wb'); fwrite($fp,$contents); fclose($fp); chmod($cache_file,0777); //生成新缓存的同时,自动删除所有的老缓存。以节约空间。 clean_old_cache(); return $contents; } function clean_old_cache() { chdir(CACHE_ROOT); foreach (glob("*/*".CACHE_SUFFIX) as $file) { if(time()-filemtime($file)>CACHE_LIFE) { unlink($file); } } } //回调函数 auto_cache ob_start('auto_cache');}else{ //不是GET的请求就删除缓存文件。 if(file_exists($cache_file))unlink($cache_file);}?> 大神帮我看看!!!!!!
呵呵其实我说的夸张了些,,,没有访问那么多,,就是 发现 访问多了之后 打开速度很慢,,
而且cpu 占用很多,,删除缓存后, 貌似好一些,,,请高手看看, 是否是我的缓存写的有些问题。。
目前发现 是缓存文件数量过大, 导致每次访问调用缓存文件,占用资源,,希望高手 解答,重金相谢!!
freemaker 搞成静态的网页