목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 求高效的缓存类,每秒访问1W次页面 服务器扛不住

求高效的缓存类,每秒访问1W次页面 服务器扛不住

Jun 23, 2016 pm 02:12 PM

求高效的缓存类,每秒访问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 搞成静态的网页

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

라 라벨에서 알림

See all articles