ホームページ  >  記事  >  バックエンド開発  >  PHP エンタープライズ アプリケーションの一般的なキャッシュ テクノロジ_PHP チュートリアル

PHP エンタープライズ アプリケーションの一般的なキャッシュ テクノロジ_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:32:26849ブラウズ

ユニバーサル キャッシュ テクノロジー
データ キャッシュ: ここで言うデータ キャッシュは、ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、存在しない場合はデータベースに接続します。データを取得し、クエリ結果をシリアル化してファイルに保存すると、将来は同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。
最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。
一般的な方法では、複数のテーブルが関連付けられている場合、配列を生成し、アタッチされたテーブルの内容をメイン テーブルのフィールドに保存します。これには、1 つのテーブルのみを読み取るという利点があります。 2 つの欠点があります。データの同期にはさらに多くの手順が必要であり、データベースが常にボトルネックになります。速度を優先することが重要です。
ページキャッシュ:
ページにアクセスするたびに、まず対応するキャッシュされたページファイルが存在するかどうかを検出し、存在しない場合はデータベースに接続し、データを取得してページを表示し、キャッシュされたページファイルを生成します。同時に、次回アクセスするときにページ ファイルが活躍するようになります。 (インターネット上のテンプレート エンジンと一部の一般的なキャッシュ クラスには通常この機能があります)
時間トリガー キャッシュ:
ファイルが存在するかどうか、およびタイムスタンプが設定された有効期限よりも小さいかどうかを確認します (ファイル変更のタイムスタンプが短い場合)。現在のタイムスタンプから有効期限を引いた値よりスタンプが大きい場合はキャッシュを使用し、それ以外の場合はキャッシュを更新します。
コンテンツトリガーキャッシュ:
データの挿入または更新時にキャッシュを強制的に更新します。
静的キャッシュ:
ここで言う静的キャッシュとは、HTMLやxmlなどのテキストファイルを直接生成し、更新があった場合に再生成する静的キャッシュを指します。あまり変更のないページに適しているので、勝ちました。ここではそれについて話さないでください。
上記の内容は他のフレームワークを直接CPするもので、内容はほぼ同じですが、次の内容はさまざまな方法で使用できます。コードレベルでは、それを実現するには複数の関係者の協力が必要です
メモリキャッシュ:
Memcached は、データベースの負荷を軽減し、アクセス速度を向上させるために使用される高性能の分散メモリオブジェクトキャッシュシステムです。動的なアプリケーション。
Memcached の例を次に示します:

コードをコピーします コードは次のとおりです:

$memcache = new Memcache
$memcache->connect('localhost', 11211 ) または die ( "接続できませんでした");
$version = $memcache->getVersion();
echo "サーバーのバージョン: ".$version."n"; >str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) または 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" = mysql_connect('localhost', 'test', 'test'); 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 ($データ);


PHP のバッファ:
eaccelerator、apc、phpa、xcache があります。これらについては説明しません。これが利用可能であることがわかっている場合は、問題ありません。
MYSQL キャッシュ。コードレベルでは、古典的なデータベースはこの方法を使用します。以下の実行時間 (0.09xxx など) を見てください。 2G MYISAM テーブルに従って変更された my.ini のセクションを投稿します。 0.05Sで使用可能 およそ1年近く変更したと言われています
[client]
...
default-character-set=gbk
default-storage-engine=MYISAM
max_connections=600
max_connect_errors= 500
back_log=200
interactive_timeout=7200
query_cache_size=64M
……
table_cache=512
……
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G am_sort_buffer_size=128M
key_buffer_size=1024M
read_buffer_size=512M
……
thread_concurrency=8
リバースプロキシに基づくWebキャッシュ:
Nginx、SQUID、mod_PROxyなど(apache2以降はmod_proxyとmod_cacheに分かれています)
NGINXの例



コードをコピーします
コードは次のとおりです:


#ユーザー誰もいない;
worker_processes 4;
error_log ログ/error.log crit;
pid ログ/nginx.pid;
worker_rlimit_nofile 10240;
イベント {
epoll を使用します。
worker_connections 51200;
}
http {
mime.types を含める;
default_type アプリケーション/オクテットストリーム;
ファイルを送信します。
キープアライブタイムアウト 65;
tcp_nodelay オン;
# サーバー プール
アップストリーム bspfrontsvr {
サーバー 10.10.10.224:80 重み = 1;
サーバー 10.10.10.221:80 重み = 1;
}
アップストリーム bspimgsvr {
サーバー 10.10.10.201:80 重み = 1;
}
アップストリーム bspstylesvr {
サーバー 10.10.10.202:80 重み = 1;
}
アップストリーム bsphelpsvr {
サーバー 10.10.10.204:80 重み = 1;
}
アップストリーム bspwsisvr {
サーバー 10.10.10.203:80 重み = 1;
}
アップストリーム bspadminsvr {
サーバー 10.10.10.222:80 重み = 1;
}
アップストリーム bspbuyersvr {
サーバー 10.10.10.223:80 重み = 1;
}
アップストリーム bspsellersvr {
サーバー 10.10.10.225:80 重み = 1;
}
アップストリーム bsploginsvr {
サーバー 10.10.10.220:443 重み = 1;
}
アップストリーム bspregistersvr {
サーバー 10.10.10.220:80 重み = 1;
}
log_format test_com ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” “$http_user_agent” ‘;
#——————————————————————–
#img.test.com
server {
listen 10.10.10.230:80;
サーバー名 img.test.com;
location / {
proxy_pass http://bspimgsvr;
proxy_setting.conf をインクルードします。
}
access_log logs/img.log test_com;
}
#style.test.com
server {
listen 10.10.10.230:80;
サーバー名 style.test.com;
location / {
proxy_pass http://bspstylesvr;
proxy_setting.conf をインクルードします。
}
access_log logs/style.log test_com;
}
#help.test.com
server {
listen 10.10.10.230:80;
サーバー名 help.test.com;
location / {
proxy_pass http://bsphelpsvr;
proxy_setting.conf をインクルードします。
}
access_log logs/help.log test_com;
}
#admin.test.com
server {
listen 10.10.10.230:80;
サーバー名 admin.test.com;
location / {
proxy_pass http://bspadminsvr;
proxy_setting.conf をインクルードします。
}
access_log logs/admin.log test_com;
}
#buyer.test.com
server {
listen 10.10.10.230:80;
サーバー名 buyer.test.com;
location / {
proxy_pass http://bspbuyersvr;
proxy_setting.conf をインクルードします。
}
access_log logs/buyer.log test_com;
}
#seller.test.com
server {
listen 10.10.10.230:80;
サーバー名 sell.test.com;
location / {
proxy_pass http://bspsellersvr;
proxy_setting.conf をインクルードします。
}
access_log logs/seller.log test_com;
}
#wsi.test.com
server {
listen 10.10.10.230:80;
サーバー名 wsi.test.com;
location / {
proxy_pass http://bspwsisvr;
proxy_setting.conf をインクルードします。
}
access_log logs/wsi.log test_com;
}
#www.test.com
server {
listen 10.10.10.230:80;
サーバー名 www.test.com *.test.com;
location ~ ^/NginxStatus/ {
stub_status on;
access_log off;
}
location / {
proxy_pass http://bspfrontsvr;
proxy_setting.conf をインクルードします。
}
access_log logs/www.log test_com;
エラーページ 500 502 503 504 /50x.html;
location = /50x.html {
ルート html;
}
}
#login.test.com
server {
listen 10.10.10.230:443;
サーバー名login.test.com;
SSLがオン。
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5 分;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers オン;
location / {
proxy_pass https://bsploginsvr;
proxy_setting.conf をインクルードします。
}
access_log logs/login.log test_com;
}
#login.test.com
server 登録用 {
listen 10.10.10.230:80;
サーバー名login.test.com;
location / {
proxy_pass http://bspregistersvr;
proxy_setting.conf をインクルードします。
}
access_log logs/register.log test_com;
}
}

proxy_redirect オフ;
proxy_set_header ホスト $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
mod_proxy の例:

サーバー名 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
# 有効期限 = (現在– last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# デフォルト有効期限タグ: 時間
CacheDefaultExpire 1
# コンテンツの割合が取得された後に強制完了: 60-90%
CacheForceCompletion 80
CustomLog /usr/local/apache/logs/dev_access_log結合
< ;/仮想ホスト>

その SQUID の例我不说明了,此面網上有書多多,大家自己搜索一下
DNS 轮询:
BIND 是一款开放源コード的 DNS サービス提供者软件,此要要来来就大了、自己検索去、大家知道がこのようなサービスを行っています。関連するサーバー内で自動的に解析されます。

http://www.bkjia.com/PHPjc/322803.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/322803.html技術記事大衆缓存技术 データ缓存: ここに访问的データ缓存は指数据库查询存、次回访问页面的時候、都市先检测相应的データ存存存否、存存しない場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。