ホームページ  >  記事  >  バックエンド開発  >  PHP エンタープライズ レベルのアプリケーション キャッシュ テクノロジの詳細な説明

PHP エンタープライズ レベルのアプリケーション キャッシュ テクノロジの詳細な説明

巴扎黑
巴扎黑オリジナル
2016-11-23 15:36:091232ブラウズ

以前に PHP キャッシュ テクノロジについて詳しく説明し、主にデータ キャッシュについて説明しました。データ キャッシュは主にデータベース クエリ キャッシュを指します。ページにアクセスするたびに、対応するキャッシュ データが存在するかどうかが最初に検出され、存在しない場合はデータベースに接続してデータを取得し、クエリを完了します。




PHP キャッシュ テクノロジについて詳しく説明し、主にデータ キャッシュについて説明しました。データ キャッシュは主にデータベース クエリ キャッシュを指します。ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、クエリ結果をシリアル化して保存します。同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。

最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。

一般的な方法では、複数のテーブルが関連付けられている場合、アタッチされたテーブルの内容が配列に生成され、必要に応じて配列が 1 つだけ分解されるという利点があります。テーブルを読み取ることはできますが、欠点は 2 つあります。データを同期するにはさらに多くの手順が必要になるため、速度と引き換えにハードディスクを使用することが重要になります。

ページキャッシュ

ページにアクセスするたびに、まず対応するキャッシュされたページファイルが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、ページを表示してキャッシュされたページファイルを生成します。同時に、次回アクセスしたときにページ ファイルが有効になるようにします。 (インターネット上のテンプレート エンジンと一部の一般的なキャッシュ クラスには通常この機能があります)

時間トリガー キャッシュ

ファイルが存在するかどうか、およびタイムスタンプが設定された有効期限よりも小さいかどうかを確認します。 ファイル変更のタイムスタンプが設定された有効期限よりも小さい場合。現在のタイムスタンプから有効期限タイムスタンプを引いた値が大きい場合はキャッシュを使用し、そうでない場合はキャッシュを更新します。

コンテンツトリガーキャッシュ

データが挿入または更新されると、キャッシュは強制的に更新されます。

静的キャッシュ

ここでいう静的キャッシュとは、HTMLやxmlなどのテキストファイルを静的に直接生成し、更新があったときに再生成するものを指します。 あまり変更のないページに適しているので、話は省略します。それについてはここで。

メモリ キャッシング

Memcached は、データベースの負荷を軽減し、動的アプリケーションのアクセス速度を向上させるために使用される高性能の分散メモリ オブジェクト キャッシング システムです。



$memcache = new Memcache;

$memcache->connect('localhost', 11211) or die ("接続できませんでした");

Echo "サーバーのバージョン" : “.$version.”n”

$tmp_object = new stdClass;

$tmp_object->int_attr = 123; ('key', $tmp_object, false, 10) or die (“サーバーでのデータの保存に失敗しました”);

echo “データをキャッシュに保存します (データは 10 秒で期限切れになります)n”;

$get_result = $memcache->get('key');

echo "キャッシュからのデータ:n";

?>



$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');

$result = mysql_query($ sql); $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 のようです。



[クライアント]

……

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

myisam_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の例:



#user none;

error_log logs/error.log crit;

worker_rlimit_nofile 10240;
epoll を使用します

worker_connections 51200 ;

}

http {

include mime.types;

default_type application/octet-stream

# サーバープール

server 10.10.10.22 4:80 重量 = 1

サーバー 10.10.10.221: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.22 2:80 重量 = 1; 223:80 重量=1;

}

アップストリーム bspsellersvr {

サーバー 10.10.10.225:80 重み=1;

アップストリーム bsploginsvr {

サーバー 10.10.10.220:443 重み=1;

}

アップストリーム bspregistersvr {

server 10.10.10.220:80weight =1;

}

log_format test_com '$remote_addr – $remote_user [$time_local] "$request" '

$status $body_bytes_sent "$http_referer" "$http_user_a紳士「」 ;

#—————— ——————————————————–

#img.test.com

server {

listen 10.10.10.230:80;

server_name img.test.com;

location / {

proxy_pass http://bspimgsvr;

access_log logs/img.log test_com;

#スタイル.test.com

server {

listen 10.10.10.230:80;

server_name style.test.com

location / {

proxy_pass http://bspstylesvr;

}

access_log logs /style.log test_com;

include proxy_setting .conf

server_name admin.test.com; proxy_pass http ://bspadminsvr;

include proxy_setting.conf;

access_log logs/admin.log test_com;

#buyer.test.com

リッスン 10.10.10.23 0:80;
server_name buyer.test.com;

location / {

proxy_pass http://bspbuyersvr;

access_log log s/buyer.log test_com;


#seller.test.com

  サーバー {

listen 10.10.10.230:80; 

server_name 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; 

server_name 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; 

server_name 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; 

error_page 500 502 503 504 /50x.html; 

location = /50x.html {

root html; 

}

}

#login.test.com

server {

listen 10.10.10.230:443; 

server_namelogin.test.com; 

SSLオン。 

ssl_certificate cert.pem; 

ssl_certificate_key cert.key; 

ssl_session_timeout 5m; 

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 登録用

サーバー {

listen 10.10.10.230:80; 

server_namelogin.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の例:



 

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 80

CustomLog /usr/local/apache/logs/dev_access_log 結合

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。