ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルで一般的に使用されるキャッシュ テクノロジの概要

PHP_PHP チュートリアルで一般的に使用されるキャッシュ テクノロジの概要

WBOY
WBOYオリジナル
2016-07-13 10:30:29798ブラウズ

1. データのキャッシュ

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

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

一般的な方法では、複数のテーブルが関連付けられている場合、配列を生成し、アタッチされたテーブルの内容をメイン テーブルのフィールドに保存します。これには、1 つのテーブルのみを読み取るという利点があります。 2 つの欠点があります。データの同期にはさらに多くの手順が必要であり、データベースが常にボトルネックになります。速度を優先することが重要です。

2. ページのキャッシュ

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

3. 時間トリガーキャッシュ

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

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

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

5. 静的キャッシュ

ここで言う静的キャッシュとは、HTMLやXMLなどのテキストファイルを静的に直接生成し、更新の際に再生成するものを指します。あまり変更のないページに適していますので、ここでは説明しません。

上記のコンテンツはコードレベルのソリューションであり、他のフレームワークを直接 CP するものであり、変更するのが面倒です。内容は似ており、簡単に実行でき、いくつかの方法で併用できます。ただし、次のコンテンツはサーバーです。コードレベルでは、複数の関係者の協力が必要です。

6. メモリ キャッシング

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

コードをコピーします コードは次のとおりです:
$memcache = new Memcache;
$memcache->connect('localhost', 11211 ) または 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 オブジェクト識別 Symbol
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);



7. PHP バッファーとアクセラレータ

eaccelerator、apc、phpa、xcache などがありますが、これらについてはあまり話さないで、そのようなものがあることを知っていれば大丈夫です。

8. MYSQL キャッシュ

これは非コード レベルとも考えられます。以下の実行時間 (0.09xxx など) を見てください。 青いやつ、2G MYISAM の時計をベースに my.ini の変更部分を投稿します。 1年近く交換したそうです。


コードをコピーします

コードは次のとおりです:

[クライアント]

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

テーブルキャッシュ= 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

9. リバースプロキシに基づく Web キャッシュ

Nginx、SQUID、mod_proxyなど(apache2以降はmod_proxyとmod_cacheに分かれています)
NGINXの例:

コードをコピー コードは以下の通りです:


#userEveryone;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 10240;
events {
use epoll;
worker_connections 51200 ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
tcp_nolay on;
# サーバープール
アップストリーム bspfrontsvr {
server 10.10.10.224:80 Weight=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;
}
アップストリーム b spbuyersvr {Server 10.10.10.223:80 Weight = 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_agent" ';
#------------------------------------------------ -------------------
#img.test.com
server {
listen 10.10.10.230:80;
server_name img.test.com;
location / {
proxy_pass http://bspimgsvr;
include proxy_setting.conf;
}
access_log logs/img.log test_com;
}
#style.test.com
server {
listen 10.10.10.230:80;
server_name style.test. com;
location / {
proxy_pass http://bspstylesvr;
include proxy_setting.conf;
}
access_log logs/style.log test_com;
}
#help.test.com
server {
listen 10.10.10.230:80 ;
server_name help.test.com;
location / {
proxy_pass http://bsphelpsvr;
include proxy_setting.conf;
}
access_log logs/help.log test_com;
}
#admin.test.com
server {
listen 10.10.10.230:80;
server_name admin.test.com;
location / {
proxy_pass http://bspadminsvr;
include proxy_setting.conf;
}
access_log logs/admin.log test_com;
}
#buyer .test.com
server {
listen 10.10.10.230:80;
server_name buyer.test.com;
location / {
proxy_pass http://bspbuyersvr;
include proxy_setting.conf;
}
access_log logs/buyer.log test_com;
}
#seller.test.com
server {
listen 10.10.10.230:80;
server_name sell.test.com;
location / {
proxy_pass http://bspsellersvr;
include 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;
include 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;
include 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 on;
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 on;
location / {
proxy_pass https://bsploginsvr;
include proxy_setting.conf;
}
access_log logs/login.log test_com;
}
#login.test.com for register
server {
listen 10.10.10.230:80;
server_namelogin.test.com;
location / {
proxy_pass http://bspregistersvr;
include proxy_setting.conf;
}
access_log logs/register.log test_com;
}
}

proxy_redirect off;
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;
cli ent_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;




apache mod_proxy の例:



复制代価

代価如下:


ServerName jb51.net
ServerAdmin admin@zxsv.com
# リバースプロキシ設定
ProxyPass / http://jb51.net:8080/
ProxyPassReverse / http://jb51.net: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/jb51_ログ結合



10. DNSポーリング

BIND はオープンソースの DNS サーバー ソフトウェアです。これについては、自分で検索してみてください。

chinacache などの一部の大手 Web サイトがこれを行っていることは知っています。簡単に言うと、同じページまたはファイルが異なるサーバーにキャッシュされ、北と南に従って適切なサーバーに自動的に解析されます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/765164.html技術記事 1. データキャッシュ ここで言うデータキャッシュとは、ページにアクセスするたびに、まず対応するキャッシュデータが存在するかどうかを検出し、存在しない場合は接続します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。