アウトライン
キャッシュは、プロジェクトの不可欠な部分は、それは、例えば、パフォーマンスを向上させるのI / O、ディスクI / O、プロジェクトになるように速い読み込み速度を下げるネットワークを削減するための最良の方法であるということであるとなっています。
キャッシュはCPUキャッシュ、メモリキャッシュ、ディスクキャッシュすることができ、異なるキャッシュクエリの速度は同じ(ハード・ディスク・キャッシュより優れたCPUキャッシュメモリキャッシュ)ではありません。
次に、あなたに一つ一つを紹介します。
ブラウザのキャッシュ
ブラウザは、サーバーへのアクセスを低減し、ブラウザがクライアントのキャッシュデータから直接読み取ることができ、訪問者は、再びこのページにアクセスすると、クライアントキャッシュに保存されているページをより高速ページの読み込みを要求します。
強力なキャッシュ
クライアントのキャッシュから直接ユーザーが送信要求は、サーバーが要求されていません。
よると有効期限とのCache-Controlは、キャッシュが強いヒットかどうかを判断します。
コードは以下の通りであります:
header('Expires: '. gmdate('D, d M Y H:i:s', time() + 3600). ' GMT');
header("Cache-Control: max-age=3600"); //有效期3600秒
Cache-Controlは、次のパラメータを設定できます。
-
公共:キャッシュできるすべてのユーザー(エンド・ユーザーのブラウザ/ CDNサーバ)
-
プライベート:唯一のエンドユーザーのブラウザキャッシュ
-
ノーキャッシュは:ローカルキャッシュを使用しません。
-
無店舗:無効キャッシュデータ
キャッシュ相談
ユーザーによって送信された要求は、サーバに、サーバはクライアントのキャッシュかどうかを決定します。
コードは以下の通りであります:
$last_modify = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if (time() - $last_modify < 3600) {
header('Last-Modified: '. gmdate('D, d M Y H:i:s', $last_modify).' GMT');
header('HTTP/1.1 304'); //Not Modified
exit;
}
header('Last-Modified: '. gmdate('D, d M Y H:i:s').' GMT');
キャッシュ操作上のユーザーの行動に影響を与えます
営業行動 | 有効期限 | 最終更新日 |
---|---|---|
アドレスバーに入力します。 | 効果的な | 効果的な |
ジャンプページ | 効果的な | 効果的な |
新しく開いたウィンドウ | 効果的な | 効果的な |
フォワード/リバース | 効果的な | 効果的な |
リフレッシュするF5 | 無効 | 効果的な |
リフレッシュするには、Ctrl + F5 | 無効 | 無効 |
ファイルキャッシュ
データファイルキャッシュ
更新頻度が低い場合、高周波数がキャッシュファイルにデータを読み込みます。
例えば、プロジェクトの都市で、複数の利用は3つの連鎖データを行う、私たちはバックエンドサーバを必要とせずに、JSは、直接ファイルを読み取ることができ、データのキャッシュファイル(city_data.json)に市を置くことができます。
駅の静的
CMS(コンテンツ管理システム)は、多分私達は、このような早期DEDE、PHPCMSとして、より精通している、あなたは背景静的なHTMLを設定することができ、ユーザーがサイトが静的なHTMLのリードアクセスしたときに、バックエンドデータベースを要求していない、それはしていませんサイトの読み込み速度をスピードアップするためのAjaxリクエスト・データ・インターフェース。
静的なHTMLは次のような利点があります。
-
検索エンジン(SEO)を助長します
-
ページが速く開きます
-
サーバーの負担を軽減
CDNキャッシュ
CDN(コンテンツ配信ネットワーク)コンテンツ配信ネットワーク。
ユーザーがWebサイトにアクセスすると、自動的に最寄りのCDNノードコンテンツ、サイトの開放速度をスピードアップするために、ソース・サーバに要求する必要はありませんを選択します。
ようにHTML、画像、CSS、JS、XMLを含む静的リソースをキャッシュ。
NoSQLのキャッシュ
Memcachedのキャッシング
Memcachedのは、高性能分散型メモリキャッシュサーバです。
一般的な目的は、スケーラビリティを向上させ、動的なWebアプリケーションの速度を向上させるために、データベースアクセスの数を減らす、データベースクエリの結果をキャッシュすることです。
また、画像、ビデオ、およびその他のファイルを含むデータのさまざまな形式を、格納するために使用することができます。
Memcachedのは、唯一のK / Vタイプのデータが永続ストレージをサポートしていませんサポートしています。
MemcacheのとMemcachedの違い
-
最初から0.2.0をmemcachedの、PHPのバージョン> = 5.2.0が必要で、Memcacheのは、PHPのバージョン> = 4.3が必要です。
-
memcachedの最後の投稿時間は、Memcacheの最後の2013年4月7日公開、2018年12月24日です。
-
memcachedをベースlibmemcached、ベースMemcacheのPECL拡張モジュール。
memcachedのは、Memcacheののアップグレード版として見ることができます。
PHPのMemcachedマニュアル:
http://www.php.net/manual/zh/book.memcached.php
memcachedをし、Redisのは、多くの場合、比較を行うために使用され、次はRedisのキャッシュを紹介します。
Redisのキャッシュ
Redisの高性能K / Vのデータベースです。
Redisの大部分は、ListなどのMemcached K / Vストレージの不足、(リスト)を補うセット(コレクション)、ZSET(順序集合)、ハッシュ(ハッシュ)、両方のデータがメモリに保存することができ、することもできますディスクへのデータの永続性、マスター・スレーブの同期をサポートしています。
全体的に、Redisのはもっとヘビー級、より強力な、memcachedのの拡張版として見ることができます。
Redisのは、日常業務に主に使用しました。
Redisの学習URLます。http://www.redis.cn/
MongoDBのキャッシュ
MongoDBは、分散ファイル・ストレージベースのデータベースです。C ++言語で書かれました。
WEBアプリケーションのためのスケーラブルで高性能データ・ストレージ・ソリューションを提供するために設計されています。
MongoDBは、リレーショナルデータベースのような豊かな、最も間のリレーショナルデータベースと非リレーショナルデータベース、非リレーショナルデータベース機能との機能を持つ製品です。
MongoDBの学習URLます。http://www.mongodb.org.cn
WEBサーバーのキャッシュ
Apacheのキャッシュ
使用し mod_expires
、キャッシュの有効期限を指定し、そうでHTML、画像、JS、CSSなどをキャッシュすることができます。
オープン http.conf
、モジュールを開きます。
LoadModule expires_module modules/mod_expires .so
キャッシュの有効期限を指定します。
<IfModule expires_module>
#打开缓存
ExpiresActive on
#css缓存(8640000秒=10天)
ExpiresByType text/css A8640000
#js缓存
ExpiresByType application/x-javascript A8640000
ExpiresByType application/javascript A8640000
#html缓存
ExpiresByType text/html A8640000
#图片缓存
ExpiresByType image/jpeg A8640000
ExpiresByType image/gif A8640000
ExpiresByType image/png A8640000
ExpiresByType image/x-icon A8640000
</IfModule>
nginxのキャッシュ
使用する expire
ようにHTML、画像、JS、CSSをキャッシュし、可能なパラメータ指定された有効期限キャッシングを。
開きます nginx.conf
:
//以图片为例:
location ~\.(gif|jpg|jepg|png|bmp|ico)$ { #加入新的location
root html;
expires 1d; #指定缓存时间
}
proxycachepathとproxy_cache、キャッシュ設定:我々はまた次を理解することができます。
オペコードキャッシュ
オペコード操作コード(コードを操作)。
PHPプログラムが実行され、すぐにすべてのメモリを解放し、プログラム内のすべての変数が破壊され、各要求を再変換する必要がありますPianmanかもしれスピードが得られ、実行します。
中間コードは、オペコードとして知られても、実行直接置くことができる生成するスクリプトインタプリタコードの解析の完了後。
オペレーションコードのコンパイルヘッドは、重複を避け、CPUのオーバーヘッドとメモリを削減します。
APCキャッシュ
APC(代替PHPキャッシュ)オプションのPHPのキャッシュ。
APCの目標は、キャッシング、PHPの中間コードの最適化のために、無料のオープン、かつ堅牢なフレームワークを提供することです。
APCは、より高速に実行することができますPHPスクリプトをPHP動的解析とコンパイル時間を削除することができます。
APCは、最後の2012年9月3日に公開された拡張されました。
そして、公式の説明を見つけることができます興味を持ってます。http://php.net/manual/zh/book.apc.php
eAcceleratorの
eAcceleratorの:PHPのオペコードキャッシュ。
そして、公式の説明を見つけることができます興味を持ってます。http://eaccelerator.net/
XCacheと
XCacheとは、高速かつ安定したPHPのオペコードキャッシュです。
そして、公式の説明を見つけることができます興味を持ってます。http://xcache.lighttpd.net/
概要
本論文では、主に、簡単なブラウザのキャッシュ、ファイルキャッシュ、NoSQLのキャッシュ、WEBサーバのキャッシュ、オペコード・キャッシュについて説明します。
>インストール - - >を使用する - >要約シナリオ各キャッシュは導入から、綿密な調査することができます。
皆は上記した説明では、どのような作業我々はキャッシュを使用し、考えることができますか?
あなたがキャッシュを使用することができ、あなたが私たちのプロジェクトを助けることができますか?
キャッシュに関するよくある質問
使用されるキャッシュは、我々は確かなように、データの一貫性、雪崩、ホットデータキャッシュ、キャッシュの監視と、より頭痛の問題を、遭遇しました。
みんなに純粋に引用されたゆうを投げいくつかの質問に記載されています。
キャッシュへのプロジェクトで使用するとき、私たちはなぜ、Redisのか、Memcachedのを選ぶのか?
いくつかのシナリオの場合:
、シンプルなログ収集機能を実現するか、大量のメッセージ、電子メール機能を送信するような、実装は最初のデータキューに収集され、そして、何かをするプロセスを定期的にジョブキューを消費します。
lpush、RPOPまたはrpush、LPOPのRedisの直接使用。
//进队列
$redis->lpush(key, value);
//出队列
$redis->rpop(key);
そのようなデータ構造をmemcachedをしません。
第二に、我々はそのようなID、名前、電話番号、年齢、身長、などのユーザ情報を格納したい、どのように保存するには?
プログラム:キー=>値
キー=ユーザデータのユーザID
値= json_encode(ユーザデータ)
クエリは、最初のキーを削除し、json_decode解像度。
オプション2:ハッシュ
キー=ユーザデータのユーザID
ハッシュキー=名前、値= XX
ハッシュキー=電話、値= XX
ハッシュキーは=年齢、値= XX
ハッシュキー=高さ、値= XX
場合は、クエリは、キーを削除することができます。
//新增
$redis->hSet(key, hashKey, value);
$redis->hSet(key, hashKey, value);
$redis->hSet(key, hashKey, value);
//编辑
$redis->hSet(key, hashKey, value);
//查询
$redis->hGetAll(key); //查询所有属性
$redis->hGet(key, hashKey); //查询某个属性
スキームIスキームIIは優れています。
このようように社会的な新浪微博、ファンと個人のウォッチリストセンターのリスト、双方向ウォッチリストだけでなく、人気のマイクロブログのようなプロジェクトだけでなく、ニュースを購読したように、第3。
その他の関連するデータ構造は、Redisのを提供するために使用されています。
四、Memcachedのは専用メモリに格納され、Redisのは、メモリに格納することができる、あなたはまた、ディスクに保存することができます。
ニーズのデータのニーズが解決しない場合は、Redisのを選択してください。
個人のMemcachedが仕事で使用されていない、データを照会することによって、より良いときのMemcached Redisのメモリ割り当てを取得します。
所定の大きさに応じたスラブ割り当てMemcachedのデフォルトのメモリ管理機構、割り当てられたメモリは完全にメモリ断片化の問題を解決するために、キーと値のストア特定のデータ・レコード長の長さに対応するブロックに分割されます。
データの一貫性およびキャッシュ・データベースを確保するには?
新データ:最初のデータベースに追加して、キャッシュに追加しました。
データを編集:データベース内のデータを変更し、キャッシュされたデータを削除し、キャッシュに追加。
キャッシュデータを削除して、データベース内のデータを削除します。データを削除します。
クエリデータ:最初のデータクエリキャッシュは、ないし、データベースを照会して、キャッシュに追加します。
強い整合性は、そのような時間のトランザクションの一貫性、整合点、最終一貫として、保証することは困難です。
特定の問題を分析します。
キャッシュはどのように行うために浸透しますか?
ユーザー要求データは、データベースに直接リクエストで、その結果、キャッシュに存在しません。
まず、仕様準拠を検証するための正規のキー値のキーを設定します。
第二に、インタフェース制限、降格、吹き、研究istioます。https://istio.io/
第三に、ブルームフィルタ。
第四に、データ記憶層は、キャッシュを更新するために、作成する場合は、存在し、空のキャッシュの有効期限を設定しないキー値があります。
どのように行う雪崩?
まず、インデックスを再構築するための唯一つの要求、キャッシュキャッシュからデータを取得し、実行を再構築するのを待っている他の要求を可能ミューテックス、。
第二に、二重キャッシング戦略、オリジナルとコピーバッファキャッシュ、キャッシュ無効化要求がキャッシュの元のコピーは、キャッシュの有効期限は、コピーバッファにオリジナルの短期的、長期的なセットに設定されています。
彼は純粋に自分の状況、特定の問題、それの具体的な分析と組み合わせて、引用されたゆうを投げにされています。
推奨読書