recherche
Maisondéveloppement back-endtutoriel phpPHP企业级应用缓存技术详解

之前我们曾深入的探讨过PHP缓存技术,其中主要提到了数据缓存。数据缓存主要是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据, 并把查询结...     




  之前我们曾深入的探讨过PHP缓存技术,其中主要提到了数据缓存。数据缓存主要是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据, 并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。 

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

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

  页面缓存 

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

  时间触发缓存 

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

  内容触发缓存 

  当插入数据或更新数据时,强制更新缓存。 

  静态缓存 

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

  内存缓存 

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



    $memcache = new Memcache;

  $memcache->connect(‘localhost’, 11211) or die (“Could not connect”); 

  $version = $memcache->getVersion(); 

  echo “Server’s version: “.$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 (“Failed to save data at the server”); 

  echo “Store data in the cache (data will expire in 10 seconds)\n”; 

  $get_result = $memcache->get(‘key’); 

  echo “Data from the cache:\n”; 

  var_dump($get_result); 

  ?> 



  读库的例子: 



    $sql = ‘SELECT * FROM users’;

  $key = md5($sql); //memcached 对象标识符

  if ( !($datas = $mc->get($key)) ) { 

  // 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集 

  echo “n”.str_pad(‘Read datas from 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(‘Read datas from memcached.’, 60, ‘_’).”n”; 

  } 

  var_dump($datas); 

  ?> 



  PHP的缓冲器 

  比如eaccelerator,apc,phpa,xcache等等。 

  MySQL缓存 

  这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的。 



  [client] 

  …… 

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

  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_nodelay on; 

  # server pool 

  upstream bspfrontsvr { 

  server 10.10.10.224:80 weight=1; 

  server 10.10.10.221:80 weight=1; 

  } 

  upstream bspimgsvr { 

  server 10.10.10.201:80 weight=1; 

  } 

  upstream bspstylesvr { 

  server 10.10.10.202:80 weight=1; 

  } 

  upstream bsphelpsvr { 

  server 10.10.10.204:80 weight=1; 

  } 

  upstream bspwsisvr { 

  server 10.10.10.203:80 weight=1; 

  } 

  upstream bspadminsvr { 

  server 10.10.10.222:80 weight=1; 

  } 

  upstream bspbuyersvr { 

  server 10.10.10.223:80 weight=1; 

  } 

  upstream bspsellersvr { 

  server 10.10.10.225:80 weight=1; 

  } 

  upstream bsploginsvr { 

  server 10.10.10.220:443 weight=1; 

  } 

  upstream bspregistersvr { 

  server 10.10.10.220:80 weight=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 seller.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_name login.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_name login.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 $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 

  # reverse proxy setting 

  ProxyPass / http://www.zxsv.com:8080/ 

  ProxyPassReverse / http://www.zxsv.com:8080/ 

  # cache dir root 

  CacheRoot “/var/www/proxy” 

  # max cache storage 

  CacheSize 50000000 

  # hour: every 4 hour 

  CacheGcInterval 4 

  # max page expire time: hour 

  CacheMaxExpire 240 

  # Expire time = (now – last_modified) * CacheLastModifiedFactor 

  CacheLastModifiedFactor 0.1 

  # defalt expire tag: hour 

  CacheDefaultExpire 1 

  # force complete after precent of content retrived: 60-90% 

  CacheForceCompletion 80 

  CustomLog /usr/local/apache/logs/dev_access_log combined 

  

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
PHP et Python: différents paradigmes expliquésPHP et Python: différents paradigmes expliquésApr 18, 2025 am 12:26 AM

PHP est principalement la programmation procédurale, mais prend également en charge la programmation orientée objet (POO); Python prend en charge une variété de paradigmes, y compris la POO, la programmation fonctionnelle et procédurale. PHP convient au développement Web, et Python convient à une variété d'applications telles que l'analyse des données et l'apprentissage automatique.

PHP et Python: une plongée profonde dans leur histoirePHP et Python: une plongée profonde dans leur histoireApr 18, 2025 am 12:25 AM

PHP est originaire en 1994 et a été développé par Rasmuslerdorf. Il a été utilisé à l'origine pour suivre les visiteurs du site Web et a progressivement évolué en un langage de script côté serveur et a été largement utilisé dans le développement Web. Python a été développé par Guidovan Rossum à la fin des années 1980 et a été publié pour la première fois en 1991. Il met l'accent sur la lisibilité et la simplicité du code, et convient à l'informatique scientifique, à l'analyse des données et à d'autres domaines.

Choisir entre PHP et Python: un guideChoisir entre PHP et Python: un guideApr 18, 2025 am 12:24 AM

PHP convient au développement Web et au prototypage rapide, et Python convient à la science des données et à l'apprentissage automatique. 1.Php est utilisé pour le développement Web dynamique, avec une syntaxe simple et adapté pour un développement rapide. 2. Python a une syntaxe concise, convient à plusieurs champs et a un écosystème de bibliothèque solide.

PHP et frameworks: moderniser la languePHP et frameworks: moderniser la langueApr 18, 2025 am 12:14 AM

PHP reste important dans le processus de modernisation car il prend en charge un grand nombre de sites Web et d'applications et d'adapter les besoins de développement via des cadres. 1.Php7 améliore les performances et introduit de nouvelles fonctionnalités. 2. Des cadres modernes tels que Laravel, Symfony et Codeigniter simplifient le développement et améliorent la qualité du code. 3. L'optimisation des performances et les meilleures pratiques améliorent encore l'efficacité de l'application.

Impact de PHP: développement Web et au-delàImpact de PHP: développement Web et au-delàApr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables?Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables?Apr 17, 2025 am 12:25 AM

Le type PHP invite à améliorer la qualité et la lisibilité du code. 1) Conseils de type scalaire: Depuis PHP7.0, les types de données de base sont autorisés à être spécifiés dans les paramètres de fonction, tels que INT, Float, etc. 2) Invite de type de retour: Assurez la cohérence du type de valeur de retour de fonction. 3) Invite de type d'union: Depuis PHP8.0, plusieurs types peuvent être spécifiés dans les paramètres de fonction ou les valeurs de retour. 4) Invite de type nullable: permet d'inclure des valeurs nulles et de gérer les fonctions qui peuvent renvoyer les valeurs nulles.

Comment PHP gère le clonage des objets (mot-clé de clone) et la méthode de magie __clone?Comment PHP gère le clonage des objets (mot-clé de clone) et la méthode de magie __clone?Apr 17, 2025 am 12:24 AM

Dans PHP, utilisez le mot-clé Clone pour créer une copie de l'objet et personnalisez le comportement de clonage via la méthode de magie du clone \ _ \ _. 1. Utilisez le mot-clé Clone pour faire une copie peu profonde, en clonant les propriétés de l'objet mais pas aux propriétés de l'objet. 2. La méthode du clone \ _ \ _ peut copier profondément les objets imbriqués pour éviter les problèmes de copie superficiels. 3. Faites attention pour éviter les références circulaires et les problèmes de performance dans le clonage et optimiser les opérations de clonage pour améliorer l'efficacité.

PHP vs Python: cas d'utilisation et applicationsPHP vs Python: cas d'utilisation et applicationsApr 17, 2025 am 12:23 AM

PHP convient aux systèmes de développement Web et de gestion de contenu, et Python convient aux scripts de science des données, d'apprentissage automatique et d'automatisation. 1.Php fonctionne bien dans la création de sites Web et d'applications rapides et évolutifs et est couramment utilisé dans CMS tel que WordPress. 2. Python a permis de manière remarquable dans les domaines de la science des données et de l'apprentissage automatique, avec des bibliothèques riches telles que Numpy et Tensorflow.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.