以前に PHP キャッシュ テクノロジについて詳しく説明し、主にデータ キャッシュについて説明しました。データ キャッシュは主にデータベース クエリ キャッシュを指します。ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、クエリ結果をシリアル化して保存します。同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。
最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。
一般的な方法として、複数のテーブルを関連付けた場合、添付されたテーブルの内容を配列に生成し、必要に応じて配列を分解して1つのテーブルのみを読み込むことができるという利点があります。ただし、データの同期にはさらに多くの手順が必要であり、速度と引き換えにデータベースが常にボトルネックになります。
ページキャッシュ
ページにアクセスするたびに、まず対応するキャッシュされたページファイルが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、ページを表示すると同時にキャッシュされたページファイルを生成します。次回アクセスしたときにページ ファイルが有効になることを確認します。 (インターネット上のテンプレート エンジンと一部の一般的なキャッシュ クラスには、通常、この機能があります)
時間トリガーキャッシュ
ファイルが存在し、タイムスタンプが設定された有効期限よりも小さいかどうかを確認し、ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合はキャッシュを使用し、それ以外の場合はキャッシュを更新します。
コンテンツトリガーキャッシュ
データが挿入または更新されると、キャッシュが強制的に更新されます。
静的キャッシュ
ここでいう静的キャッシュとは、HTMLやxmlなどのテキストファイルを静的に直接生成し、更新があったときに再生成するものを指し、あまり変化のないページに適しているので、ここでは触れません。
メモリキャッシュ
Memcached は、データベースの負荷を軽減し、動的アプリケーションのアクセス速度を向上させるために使用される高性能の分散メモリ オブジェクト キャッシング システムです。
$memcache = 新しい Memcache;
$memcache->connect(‘localhost’, 11211) or die (「接続できませんでした」);
$version = $memcache->getVersion();
echo "サーバーのバージョン: ".$version."n";
$tmp_object = 新しい stdClass;
$tmp_object->str_attr = ‘テスト’;
$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 オブジェクト識別子 www.2cto.com
if ( !($datas = $mc->get($key)) ) {
// memcached でキャッシュされたデータが取得できない場合は、データベースクエリを使用してレコードセットを取得します
echo “n”.str_pad(‘MySQLからデータを読み込む。’, 60, ‘_’).”n”;
$conn = mysql_connect(‘localhost’, ‘test’, ‘test’);
mysql_select_db(‘テスト’);
$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のようです。
[クライアント]
……
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の例:
#ユーザー誰もいない;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 10240;
イベント {
epollを使用します;
worker_connections 51200;
}
http {
mime.typesを含める;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
#サーバープール
アップストリーム bspfrontsvr {
サーバー10.10.10.224:80weight=1;
サーバー10.10.10.221:80weight=1;
}
アップストリーム bspimgsvr {
サーバー10.10.10.201:80weight=1;
}
アップストリーム bspstylesvr {
サーバー10.10.10.202:80weight=1;
}
アップストリーム bshelpsvr {
サーバー10.10.10.204:80weight=1;
}
アップストリーム bspwsisvr {
サーバー10.10.10.203:80weight=1;
}
アップストリーム bspadminsvr {
サーバー10.10.10.222:80weight=1;
}
アップストリーム bspbuyersvr {
サーバー10.10.10.223:80weight=1;
}
アップストリーム bspsellersvr {
サーバー10.10.10.225:80weight=1;
}
アップストリーム bsploginsvr {
サーバー10.10.10.220:443weight=1;
}
アップストリーム bspregistersvr {
サーバー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_agent” ‘;
#——————————————————————–
#img.test.com
サーバー{
10.10.10.230:80;
を聞いてくださいサーバー名 img.test.com;
場所 / {
proxy_pass http://bspimgsvr;
proxy_setting.confを含める;
}
access_log logs/img.log test_com;
}
#style.test.com
サーバー{
10.10.10.230:80;
を聞いてくださいserver_name style.test.com;
場所 / {
proxy_pass http://bspstylesvr;
proxy_setting.confを含める;
}
access_log logs/style.log test_com;
}
#help.test.com
サーバー{
10.10.10.230:80;
を聞いてくださいserver_name help.test.com;
場所 / {
proxy_pass http://bsphelpsvr;
proxy_setting.confを含める;
}
access_log logs/help.log test_com;
}
#admin.test.com
サーバー{
10.10.10.230:80;
を聞いてくださいserver_name admin.test.com;
場所 / {
proxy_pass http://bspadminsvr;
proxy_setting.confを含める;
}
access_log logs/admin.log test_com;
}
#buyer.test.com
サーバー{
10.10.10.230:80;
を聞いてくださいserver_name buyer.test.com;
場所 / {
proxy_pass http://bspbuyersvr;
proxy_setting.confを含める;
}
access_log logs/buyer.log test_com;
}