ホームページ > バックエンド開発 > PHPチュートリアル > 1 秒あたり 10,000 ページにアクセスできる効率的なキャッシュ クラスを探しています。サーバーはそれを処理できません。

1 秒あたり 10,000 ページにアクセスできる効率的なキャッシュ クラスを探しています。サーバーはそれを処理できません。

WBOY
リリース: 2016-06-23 14:12:00
オリジナル
977 人が閲覧しました

効率的なキャッシュ クラスを探しています。ページごとにアクセスが異なり、数百万回もアクセスされる可能性があります。キャッシュ処理を試したいのですが、キャッシュ クラスを見つけました。それは負荷の問題を解決しないということです。 ! ! !





<?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がかなり消費します、、キャッシュを削除した後、改善されたようです、、、専門家は、私のキャッシュの書き込みに何か問題があるかどうかを見てください。 。

メモリベースのキャッシュ ソフトウェアとデータベースはありませんか?
ハードウェア構成とオペレーティング システムに基づいて選択できます

ピーク期間中は、1 秒あたり 20 回、合計 30 の Web サイトにアクセスされるため、60 回のアクセスになります

まずコードと SQL を最適化します, そしてファイルの分離とキャッシュは基本的に、同時実行性の問題のほとんどを解決できますが、それでも解決しない場合は、通常のテクノロジーではワークロードを解決できないことを意味します。Yahoo と Google の取り組みを見てみましょう。

ピーク時は 1 秒あたり約 20 件のアクセスがあり、合計 30 の Web サイトがあるため、60 回になります

Web サイトのアクセス速度に影響を与える要因は、データベースの負荷、サーバーの負荷、帯域幅の負荷など、さまざまです。 、タイトルに「1 秒あたり数万 PV」と記載されている場合、前述したことはいずれも 1 台のサーバーでは許容できません。サーバー クラスターを構築する必要があります。 1 秒あたり 20 回と言った場合、私の経験では、この種のトラフィックでは帯域幅のみがボトルネックを引き起こす可能性があります。ページ上のすべてのリソースの合計サイズに 20 を掛けた値が帯域幅を超えるかどうかを計算します。

データベースの負荷、サーバーの負荷、帯域幅の負荷など、Web サイトのアクセス速度に影響を与える要因は数多くあります。タイトルにある 1 秒あたり 10,000 PV である場合、先ほど述べたものはどれも許容できません。単一のサーバー サーバー クラスターが必要です。 1 秒あたり 20 回と言った場合、私の経験では、この種のトラフィックでは帯域幅のみがボトルネックを引き起こす可能性があります。ページ上のすべてのリソースの合計サイズに 20 を掛けた値が帯域幅を超えるかどうかを計算します。

現在、キャッシュ ファイルの数が多すぎることが判明しており、そのため毎回キャッシュ ファイルが呼び出され、リソースが占有されています。

専門家が回答できることを願っております。よろしくお願いします。 !


データベースの負荷、サーバーの負荷、帯域幅の負荷など、Web サイトのアクセス速度に影響を与える要因は数多くあります。タイトルにある 1 秒あたり 10,000 PV である場合、前に述べたものはどれも許容できません。単一サーバーでサーバークラスターを実行する必要があります。 1 秒あたり 20 回と言った場合、私の経験では、この種のトラフィックでは帯域幅のみがボトルネックを引き起こす可能性があります。ページ上のすべてのリソースの合計サイズに 20 を掛けた値が帯域幅を超えるかどうかを計算します。

現在、キャッシュされたファイルの数が多すぎるため、キャッシュされたファイルが毎回呼び出され、リソースを占有していることが判明しています。

専門家が回答できることを願っております。よろしくお願いします。 !
freemaker は静的な Web ページを作成します

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート