Maison >développement back-end >tutoriel php >求高效的缓存类,每秒访问1W次页面 服务器扛不住
求高效的缓存类,每秒访问1W次页面,每个页面都不一样,可能是百万级别的,,想试用缓存处理, 服务器扛不住啊,找了一个缓存类,貌似 没解决负载问题。!!!
<?php/** * auto_cache.php 实现智能的自动缓存。 * 使用办法极其简单: * 在需要实现缓存功能的页面 require 'auto_cache.php'; 就ok了 * @author rains31@gmail.com *///存放缓存的根目录,最好是放到/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 占用很多,,删除缓存后, 貌似好一些,,,请高手看看, 是否是我的缓存写的有些问题。。
不是有基于内存的缓存软件和数据库吗?
你可以根据你的硬件配置和操作系统选一款
大概高峰期,每秒访问20次吧,一共30个网站,这样 就有60次
先优化下代码和SQL吧,然后是文件分离、缓存,基本可以解决大部分的高并发,如果还不行说明你的量不是一般的技术上能解决的,看看yahoo、google怎么做的吧。
大概高峰期,每秒访问20次吧,一共30个网站,这样 就有60次
影响网站访问速度的因素很多,比如数据库压力,服务器压力,带宽压力等,如果是你标题说的每秒万次PV,那我前面说的随便哪个都不是一台服务器能承受的,你必须做服务器集群了。如果是你后面说每秒20次,以我经验数据库和服务器都无压力,只有带宽可能在这种访问量下造成瓶颈。你算下你一个页面所有资源的总大小乘以20是否超出你的带宽。
影响网站访问速度的因素很多,比如数据库压力,服务器压力,带宽压力等,如果是你标题说的每秒万次PV,那我前面说的随便哪个都不是一台服务器能承受的,你必须做服务器集群了。如果是你后面说每秒20次,以我经验数据库和服务器都无压力,只有带宽可能在这种访问量下造成瓶颈。你算下你一个页面所有资源的总大小乘以20是否超出你的带宽。
目前发现 是缓存文件数量过大, 导致每次访问调用缓存文件,占用资源,,
希望高手 解答,重金相谢!!
影响网站访问速度的因素很多,比如数据库压力,服务器压力,带宽压力等,如果是你标题说的每秒万次PV,那我前面说的随便哪个都不是一台服务器能承受的,你必须做服务器集群了。如果是你后面说每秒20次,以我经验数据库和服务器都无压力,只有带宽可能在这种访问量下造成瓶颈。你算下你一个页面所有资源的总大小乘以20是否超出你的带宽。
目前发现 是缓存文件数量过大, 导致每次访问调用缓存文件,占用资源,,
希望高手 解答,重金相谢!!
freemaker 搞成静态的网页