Heim Backend-Entwicklung PHP-Tutorial 细说PHP下的缓存技术

细说PHP下的缓存技术

Jul 25, 2016 am 09:11 AM

常用缓存技术

数据缓存:这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。

页面缓存: 每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

时间触发缓存: 检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

内容触发缓存: 当插入数据或更新数据时,强制更新缓存。

静态缓存: 这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。

以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到

内存缓存: Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

这里说下Memcached的例子:

  1. $memcache = new Memcache;
  2. $memcache->connect('localhost', 11211) or die ("Could not connect");
  3. $version = $memcache->getVersion();
  4. echo "Server's version: ".$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 ("Failed to save data at the server");
  9. echo "Store data in the cache (data will expire in 10 seconds)\n";
  10. $get_result = $memcache->get('key');
  11. echo "Data from the cache:\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('Read datas from 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('Read datas from memcached.', 60, '_')."n";
  15. }
  16. var_dump($datas);
  17. ?>
复制代码

php的缓冲器: 有eaccelerator, apc, phpa,xcache,这个这个就不说了吧,搜索一堆一堆的,自己看啦,知道有这玩意就OK

MYSQL缓存: 这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的 我贴段根据蓝色那家伙修改后部分my.ini吧,2G的MYISAM表可以在0.05S左右,据说他前后改了有快一年

代码拷贝框

  1. [client]
  2. ……
  3. default-character-set=gbk
  4. default-storage-engine=MYISAM
  5. max_connections=600
  6. max_connect_errors=500
  7. back_log=200
  8. interactive_timeout=7200
  9. query_cache_size=64M
  10. ……
  11. table_cache=512
  12. ……
  13. myisam_max_sort_file_size=100G
  14. myisam_max_extra_sort_file_size=100G
  15. myisam_sort_buffer_size=128M
  16. key_buffer_size=1024M
  17. read_buffer_size=512M
  18. ……
  19. thread_concurrency=8
复制代码

基于反向代理的Web缓存: 如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache) NGINX的例子

  1. #user nobody;
  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_nodelay on;
  16. # server pool
  17. upstream bspfrontsvr {
  18. server 10.10.10.224:80 weight=1;
  19. server 10.10.10.221:80 weight=1;
  20. }
  21. upstream bspimgsvr {

  22. server 10.10.10.201:80 weight=1;
  23. }
  24. upstream bspstylesvr {

  25. server 10.10.10.202:80 weight=1;
  26. }
  27. upstream bsphelpsvr {

  28. server 10.10.10.204:80 weight=1;
  29. }
  30. upstream bspwsisvr {

  31. server 10.10.10.203:80 weight=1;
  32. }
  33. upstream bspadminsvr {

  34. server 10.10.10.222:80 weight=1;
  35. }
  36. upstream bspbuyersvr {

  37. server 10.10.10.223:80 weight=1;
  38. }
  39. upstream bspsellersvr {

  40. server 10.10.10.225:80 weight=1;
  41. }
  42. upstream bsploginsvr {
  43. server 10.10.10.220:443 weight=1;
  44. }
  45. upstream bspregistersvr {
  46. server 10.10.10.220:80 weight=1;
  47. }
  48. log_format test_com '$remote_addr - $remote_user [$time_local] "$request" '
  49. '$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
  50. #--------------------------------------------------------------------
  51. #img.test.com
  52. server {
  53. listen 10.10.10.230:80;
  54. server_name img.test.com;
  55. location / {
  56. proxy_pass http://bspimgsvr;
  57. include proxy_setting.conf;
  58. }
  59. access_log logs/img.log test_com;
  60. }
  61. #style.test.com

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

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

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

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

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

  167. proxy_redirect off;
  168. proxy_set_header Host $host;
  169. proxy_set_header X-Real-IP $remote_addr;
  170. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  171. client_max_body_size 10m;
  172. client_body_buffer_size 128k;
  173. proxy_connect_timeout 90;
  174. proxy_send_timeout 90;
  175. proxy_read_timeout 90;
  176. proxy_buffer_size 4k;
  177. proxy_buffers 4 32k;
  178. proxy_busy_buffers_size 64k;
  179. proxy_temp_file_write_size 64k;
复制代码

mod_proxy的例子:

  1. ServerName www.zxsv.com
  2. ServerAdmin admin@zxsv.com
  3. # reverse proxy setting
  4. ProxyPass / http://www.zxsv.com:8080/
  5. ProxyPassReverse / http://www.zxsv.com:8080/
  6. # cache dir root
  7. CacheRoot "/var/www/proxy"
  8. # max cache storage
  9. CacheSize 50000000
  10. # hour: every 4 hour
  11. CacheGcInterval 4
  12. # max page expire time: hour
  13. CacheMaxExpire 240
  14. # Expire time = (now - last_modified) * CacheLastModifiedFactor
  15. CacheLastModifiedFactor 0.1
  16. # defalt expire tag: hour
  17. CacheDefaultExpire 1
  18. # force complete after precent of content retrived: 60-90%
  19. CacheForceCompletion 80
  20. CustomLog /usr/local/apache/logs/dev_access_log combined
复制代码

而有关SQUID的例子 ,可以参考下这里。

DNS轮询: BIND是一款开放源码的DNS服务器软件,这个要说起来就大了,自己搜索去,大家知道有这个东西就行了。 我知道的有chinacache等大站就是这样做的,说简单点就是多服务器啦,把同一个页面或文件缓存到不同的服务器上,按南北自动解析到相关的服务器中。



Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

See all articles