cari
Rumahpembangunan bahagian belakangtutorial 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 

  

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
11 skrip pemendek URL terbaik PHP (percuma dan premium)11 skrip pemendek URL terbaik PHP (percuma dan premium)Mar 03, 2025 am 10:49 AM

URL panjang, sering berantakan dengan kata kunci dan parameter penjejakan, boleh menghalang pelawat. Skrip pemendekan URL menawarkan penyelesaian, mewujudkan pautan ringkas yang sesuai untuk media sosial dan platform lain. Skrip ini sangat berharga untuk laman web individu a

Pengenalan kepada API InstagramPengenalan kepada API InstagramMar 02, 2025 am 09:32 AM

Berikutan pengambilalihan berprofil tinggi oleh Facebook pada tahun 2012, Instagram mengadopsi dua set API untuk kegunaan pihak ketiga. Ini adalah API Grafik Instagram dan API Paparan Asas Instagram. Sebagai pemaju membina aplikasi yang memerlukan maklumat dari a

Bekerja dengan Data Sesi Flash di LaravelBekerja dengan Data Sesi Flash di LaravelMar 12, 2025 pm 05:08 PM

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, ReactBina aplikasi React dengan hujung belakang Laravel: Bahagian 2, ReactMar 04, 2025 am 09:33 AM

Ini adalah bahagian kedua dan terakhir siri untuk membina aplikasi React dengan back-end Laravel. Di bahagian pertama siri ini, kami mencipta API RESTful menggunakan Laravel untuk aplikasi penyenaraian produk asas. Dalam tutorial ini, kita akan menjadi dev

Respons HTTP yang dipermudahkan dalam ujian LaravelRespons HTTP yang dipermudahkan dalam ujian LaravelMar 12, 2025 pm 05:09 PM

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API RESTCurl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API RESTMar 14, 2025 am 11:42 AM

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

12 skrip sembang php terbaik di codecanyon12 skrip sembang php terbaik di codecanyonMar 13, 2025 pm 12:08 PM

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Pengumuman Penyiasatan Situasi PHP 2025Pengumuman Penyiasatan Situasi PHP 2025Mar 03, 2025 pm 04:20 PM

Tinjauan Landskap PHP 2025 menyiasat trend pembangunan PHP semasa. Ia meneroka penggunaan rangka kerja, kaedah penempatan, dan cabaran, yang bertujuan memberi gambaran kepada pemaju dan perniagaan. Tinjauan ini menjangkakan pertumbuhan dalam PHP Versio moden

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual