一般的なキャッシュ技術
データ キャッシュ: ここで言うデータ キャッシュは、ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得します。シリアル化後、クエリ結果をファイルに保存すると、今後は同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。
最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。
一般的な方法では、複数のテーブルが関連付けられている場合、配列を生成し、アタッチされたテーブルの内容をメイン テーブルのフィールドに保存します。これには、1 つのテーブルのみを読み取るという利点があります。 2 つの欠点があります。データの同期にはさらに多くの手順が必要であり、データベースが常にボトルネックになります。速度を優先することが重要です。
ページキャッシュ:
ページにアクセスされるたびに、まず対応するキャッシュされたページ ファイルが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、ページを表示すると同時にキャッシュされたページ ファイルを生成します。これにより、次回アクセスしたときにページ ファイルが有効になります。 (インターネット上のテンプレート エンジンと一部の一般的なキャッシュ クラスには、通常、この機能があります)
時間トリガーキャッシュ:
ファイルが存在し、タイムスタンプが設定された有効期限よりも小さいかどうかを確認します。ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合は、キャッシュを使用し、それ以外の場合はキャッシュを更新します。
コンテンツトリガーキャッシュ:
データの挿入または更新時にキャッシュを強制的に更新します。
静的キャッシュ:
ここでいう静的キャッシュとは、HTMLやXMLなどのテキストファイルを静的に直接生成し、更新があったときに再生成するものを指しますので、あまり変更のないページに適していますので、ここでは説明しません。
上記の内容は他のフレームワークを直接CPするもので、内容はほぼ同じですが、次の内容はさまざまな方法で使用できます。サーバー側のキャッシュ ソリューションを実現するには、コード レベルで複数の関係者の協力が必要です
メモリキャッシュ:
Memcached は、データベースの負荷を軽減し、動的アプリケーションのアクセス速度を向上させるために使用される、高性能の分散メモリ オブジェクト キャッシュ システムです。
Memcached の例を次に示します。
-
- $memcache = new Memcache;
- $memcache->connect('localhost', 11211) or die ("接続できませんでした");
- $version = $memcache-> getVersion();
- echo "サーバーのバージョン: ".$version."n";
- $tmp_object = new stdClass;
- $tmp_object->str_attr = 'test';
- $tmp_object->int_attr = 123;
- $ memcache->set('key', $tmp_object, false, 10) or die ("サーバーでのデータの保存に失敗しました");
- echo "データをキャッシュに保存します (データは 10 秒で期限切れになります)n";
- $get_result = $memcache->get('key');
- echo "キャッシュからのデータ:n";
- var_dump($get_result);
- ?>
コードをコピー
ライブラリの読み込み例:
-
- $sql = 'SELECT * FROM users';
- $key = md5($sql); //memcached オブジェクト識別子
- if ( !($datas = $mc-> get ($key)) ) {
- // memcached でキャッシュされたデータが取得できない場合は、データベース クエリを使用してレコード セットを取得します。
- echo "n".str_pad('MySQL からデータを読み取ります。', 60, '_')."n";
- $conn = mysql_connect('localhost', 'test', 'test');
- mysql_select_db(' test');
- $result = mysql_query($sql);
- while ($row = mysql_fetch_object($result))
- $datas[] = $row;
- // データベースから取得した結果セットのデータを memcached に保存します次回の訪問のために。
- $mc->add($key, $datas);
- } else {
- echo "n".str_pad('memcached からデータを読み取ります。', 60, '_')."n";
- }
- var_dump ($datas);
- ?>
コードをコピー
phpバッファ:
eaccelerator、apc、phpa、xcache などがありますが、それらについてはあまり話さず、そのようなものがあることを知っていれば大丈夫です 。
MYSQL キャッシュ:
これは、非コード レベルともみなされます。クラシック データベースでは、この方法が使用されます。以下の実行時間を見ると、0.09xxx などです。
青字の人が修正したmy.iniの部分を載せておきます。2G MYISAMテーブルは1年近くかけて修正したそうです 。
コードコピーボックス
-
- [クライアント]
- …
- default-character-set=gbk
- default-storage-engine=MYISAM
- max_connections=600
- max_connect_errors=500
- back_log=200
- interactive_timeout=7200
- query _キャッシュサイズ=64M
- … …
- table_cache=512
- …
- myisam_max_sort_file_size=100G
- myisam_max_extra_sort_file_size=100G
- myisam_sort_buffer_size=128M
- key_buffer_size=1024M
- read_buffer_size=512M
- …
- thread_通貨=8
コードをコピー
リバースプロキシベースのWebキャッシュ:
Nginx、SQUID、mod_proxyなど(apache2以降はmod_proxyとmod_cacheに分かれています)
NGINX の例
mod_proxyの例:
-
- ServerName www.zxsv.com
- ServerAdmin admin@zxsv.com
- # リバースプロキシ設定
- ProxyPass / http://www.zxsv.com:8080/
- ProxyPassReverse / http ://www.zxsv.com:8080/
- # キャッシュディレクトリルート
- CacheRoot "/var/www/proxy"
- # 最大キャッシュストレージ
- CacheSize 50000000
- # 時間: 4 時間ごと
- CacheGcInterval 4
- # 最大ページ有効期限: 時間
- CacheMaxExpire 240
- # 有効期限 = (now - last_modified) * CacheLastModifiedFactor
- CacheLastModifiedFactor 0.1
- # デフォルトの有効期限タグ: 時間
- CacheDefaultExpire 1
- # コンテンツの割合が取得された後に強制的に完了: 60-90%
- CacheForceCompletion 8 0
- カスタムログ/ usr/local/apache/logs/dev_access_log generated
コードをコピー
SQUIDの例については、こちらを参照してください。
DNSポーリング:
BIND はオープン ソースの DNS サーバー ソフトウェアです。これは、自分で検索するだけで、誰もがその存在を知っています。
chinacache などの一部の大規模 Web サイトでは、これを行っていることを知っています。簡単に言うと、同じページまたはファイルが異なるサーバーにキャッシュされ、北と南に応じて適切なサーバーに自動的に解析されます。
|