ホームページ  >  記事  >  バックエンド開発  >  PHP でのキャッシュ テクノロジについて詳しく説明する

PHP でのキャッシュ テクノロジについて詳しく説明する

WBOY
WBOYオリジナル
2016-07-25 09:11:47839ブラウズ

一般的なキャッシュ技術

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

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

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

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

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

コンテンツトリガーキャッシュ: データの挿入または更新時にキャッシュを強制的に更新します。

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

上記の内容は他のフレームワークを直接CPするもので、内容はほぼ同じですが、次の内容はさまざまな方法で使用できます。サーバー側のキャッシュ ソリューションを実現するには、コード レベルで複数の関係者の協力が必要です

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

Memcached の例を次に示します。

  1. $memcache = new Memcache;
  2. $memcache->connect('localhost', 11211) or die ("接続できませんでした");
  3. $version = $memcache-> getVersion();
  4. echo "サーバーのバージョン: ".$version."n";
  5. $tmp_object = new stdClass;
  6. $tmp_object->str_attr = 'test';
  7. $tmp_object->int_attr = 123;
  8. $ memcache->set('key', $tmp_object, false, 10) or die ("サーバーでのデータの保存に失敗しました");
  9. echo "データをキャッシュに保存します (データは 10 秒で期限切れになります)n";
  10. $get_result = $memcache->get('key');
  11. echo "キャッシュからのデータ:n";
  12. var_dump($get_result);
  13. ?>
コードをコピー

ライブラリの読み込み例:

  1. $sql = 'SELECT * FROM users';
  2. $key = md5($sql); //memcached オブジェクト識別子
  3. if ( !($datas = $mc-> get ($key)) ) {
  4. // memcached でキャッシュされたデータが取得できない場合は、データベース クエリを使用してレコード セットを取得します。
  5. echo "n".str_pad('MySQL からデータを読み取ります。', 60, '_')."n";
  6. $conn = mysql_connect('localhost', 'test', 'test');
  7. mysql_select_db(' test');
  8. $result = mysql_query($sql);
  9. while ($row = mysql_fetch_object($result))
  10. $datas[] = $row;
  11. // データベースから取得した結果セットのデータを memcached に保存します次回の訪問のために。
  12. $mc->add($key, $datas);
  13. } else {
  14. echo "n".str_pad('memcached からデータを読み取ります。', 60, '_')."n";
  15. }
  16. var_dump ($datas);
  17. ?>
コードをコピー

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

MYSQL キャッシュ: これは、非コード レベルともみなされます。クラシック データベースでは、この方法が使用されます。以下の実行時間を見ると、0.09xxx などです。 青字の人が修正したmy.iniの部分を載せておきます。2G MYISAMテーブルは1年近くかけて修正したそうです

コードコピーボックス

  1. [クライアント]
  2. default-character-set=gbk
  3. default-storage-engine=MYISAM
  4. max_connections=600
  5. max_connect_errors=500
  6. back_log=200
  7. interactive_timeout=7200
  8. query _キャッシュサイズ=64M
  9. … …
  10. table_cache=512
  11. myisam_max_sort_file_size=100G
  12. myisam_max_extra_sort_file_size=100G
  13. myisam_sort_buffer_size=128M
  14. key_buffer_size=1024M
  15. read_buffer_size=512M
  16. thread_通貨=8
コードをコピー

リバースプロキシベースのWebキャッシュ: Nginx、SQUID、mod_proxyなど(apache2以降はmod_proxyとmod_cacheに分かれています) NGINX の例

  1. #userEveryone;
  2. worker_processes 4;
  3. error_log logs/error.log crit;
  4. pid logs/nginx.pid;
  5. worker_rlimit_nofile 10240;
  6. events {
  7. use epoll;
  8. worker_connections 51200;
  9. }
  10. http {
  11. include mime.types;
  12. default_type application/octet-stream;
  13. sendfile on;
  14. keepalive_timeout 65;
  15. tcp_nolay on;
  16. # サーバープール
  17. アップストリーム bspfrontsvr {
  18. server 10 .10。 10.224:80 重み=1;
  19. サーバー 10.10.10.221:80 重み=1;
  20. }

    gt;
  21. アップストリーム bspimgsvr {

  22. サーバー 10.10.10.201:80 重み=1;
  23. }
  24. アップストリーム bspstylesvr {

  25. サーバー 10.10.10.202:80 重み=1;
  26. }

  27. アップストリーム bsphelpsvr {

  28. サーバー 10.10.10.204:80 重み=1;
  29. }< /p>
  30. アップストリーム bspwsisvr {

  31. サーバー 10.10.10.203:80 重み = 1;
  32. }

  33. アップストリーム bspadminsvr {

  34. サーバー 10.10.10.222:80 重み = 1;
  35. }

  36. アップストリーム bspbuyersvr {

  37. サーバー 10.10.10.223:80 重み = 1;
  38. }

  39. アップストリーム bspsellersvr {

  40. サーバー 10.10.10.225:80 重み = 1;
  41. }
  42. }
  43. }
  44. } bsploginsvr {
  45. server10.10.10.20.220:443 weight = 1;
  46. }
  47. upstreambspregistersvr {
  48. server10.10.10.220:80 weight = 1;
  49. }}
  50. log_formatテスト$request" '
  51. '$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
  52. #---------------------------- ----------------------------------------
  53. #img.test.com
  54. server {
  55. listen 10.10.10.230:80;
  56. server_name img.test.com;
  57. location / {
  58. proxy_pass http://bspimgsvr;
  59. include proxy_setting.conf;
  60. }
  61. access_log logs/img.log test_com;
  62. }
  63. #style.test.com

  64. server {
  65. listen 10.10.10.230:80;
  66. server_name style.test.com;
  67. location / {
  68. proxy_pass http://bspstylesvr;
  69. include proxy_setting.conf;
  70. }
  71. access_log logs/style.log test_com;
  72. }

  73. #help.test.com

  74. server {
  75. listen 10.10.10.230:80;
  76. server_name help.test.com;
  77. location / {
  78. proxy_pass http://bsphelpsvr;
  79. include proxy_setting.conf;
  80. }
  81. access_log logs/help.log test_com;
  82. }

  83. #admin.test.com

  84. server {
  85. listen 10.10.10.230:80;
  86. server_name admin.test.com;
  87. location / {
  88. proxy_pass http://bspadminsvr;
  89. include proxy_setting.conf;
  90. }
  91. access_log logs/admin.log test_com;
  92. }

  93. #buyer.test.com

  94. server {
  95. listen 10.10.10.230:80;
  96. server_name buyer.test.com;
  97. location / {
  98. proxy_pass http://bspbuyersvr;
  99. include proxy_setting.conf;
  100. }
  101. access_log logs/buyer.log test_com;
  102. }

  103. #seller.test.com

  104. server {
  105. listen 10.10.10.230:80;
  106. server_name seller.test.com;
  107. location / {
  108. proxy_pass http://bspsellersvr;
  109. include proxy_setting.conf;
  110. }
  111. access_log logs/seller.log test_com;
  112. }
  113. #wsi.test.com
  114. server {
  115. listen 10.10.10.230:80;
  116. server_name wsi.test .com;
  117. location / {
  118. proxy_pass http://bspwsisvr;
  119. include proxy_setting.conf;
  120. }
  121. access_log logs/wsi.log test_com;
  122. }
  123. #www.test.com
  124. server {
  125. listen 10.10.10.230: 80;
  126. サーバー名 www.test.com *.test.com;
  127. location ~ ^/NginxStatus/ {
  128. stub_status on;
  129. access_log off;
  130. }
  131. location / {
  132. proxy_pass http://bspfrontsvr;
  133. include proxy_setting.conf ;
  134. }
  135. access_log logs/www.log test_com;
  136. error_page 500 502 503 504 /50x.html;
  137. location = /50x.html {
  138. root html;
  139. }
  140. }
  141. #login.test.com
  142. server {
  143. リッスン 10.10.10.230:443;
  144. server_namelogin.test.com;
  145. ssl on;
  146. ssl_certificate cert.pem;
  147. ssl_certificate_key cert.key;
  148. ssl_session_timeout 5m;
  149. ssl_protocols SSLv2 SSLv1;
  150. s sl_ciphers ALL:!ADH:!EXPORT56 :RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  151. ssl_prefer_server_ciphers on;
  152. location / {
  153. proxy_pass https://bsploginsvr;
  154. include proxy_setting.conf;
  155. }
  156. access_log ログ/ログイン。 log test_com;
  157. }
  158. #login.test.com for register
  159. server {
  160. listen 10.10.10.230:80;
  161. server_name login.test.com;
  162. location / {
  163. proxy_pass http://bspregistersvr;
  164. include proxy_setting.conf ;
  165. }
  166. access_log logs/register.log test_com;
  167. }

  168. }

  169. proxy_redirect off;
  170. proxy_set_header ホスト $host;
  171. proxy_set_header X-Real- IP $remote_addr;
  172. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  173. client_max_body_size 10m;
  174. client_body_buffer_size 128k;
  175. proxy_connect_timeout 90;
  176. proxy_send_timeout 90;
  177. proxy_read_timeout 90;
  178. proxy_buffer_size 4k;
  179. proxy_buffers 4 32k;
  180. proxy_busy_buffers_size 64k;
  181. proxy_temp_file_write_size 64k ;

コードをコピー

mod_proxyの例:

  1. ServerName www.zxsv.com
  2. ServerAdmin admin@zxsv.com
  3. # リバースプロキシ設定
  4. ProxyPass / http://www.zxsv.com:8080/
  5. ProxyPassReverse / http ://www.zxsv.com:8080/
  6. # キャッシュディレクトリルート
  7. CacheRoot "/var/www/proxy"
  8. # 最大キャッシュストレージ
  9. CacheSize 50000000
  10. # 時間: 4 時間ごと
  11. CacheGcInterval 4
  12. # 最大ページ有効期限: 時間
  13. CacheMaxExpire 240
  14. # 有効期限 = (now - last_modified) * CacheLastModifiedFactor
  15. CacheLastModifiedFactor 0.1
  16. # デフォルトの有効期限タグ: 時間
  17. CacheDefaultExpire 1
  18. # コンテンツの割合が取得された後に強制的に完了: 60-90%
  19. CacheForceCompletion 8 0
  20. カスタムログ/ usr/local/apache/logs/dev_access_log generated
コードをコピー

SQUIDの例については、こちらを参照してください。

DNSポーリング: BIND はオープン ソースの DNS サーバー ソフトウェアです。これは、自分で検索するだけで、誰もがその存在を知っています。 chinacache などの一部の大規模 Web サイトでは、これを行っていることを知っています。簡単に言うと、同じページまたはファイルが異なるサーバーにキャッシュされ、北と南に応じて適切なサーバーに自動的に解析されます。



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