Rumah pembangunan bahagian belakang tutorial php PHP企业级应用缓存技术详解

PHP企业级应用缓存技术详解

Nov 23, 2016 pm 03:36 PM

之前我们曾深入的探讨过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 Laman Web ini
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

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1663
14
Tutorial PHP
1266
29
Tutorial C#
1239
24
Terangkan jenis ralat yang berbeza dalam PHP (notis, amaran, ralat maut, ralat parse). Terangkan jenis ralat yang berbeza dalam PHP (notis, amaran, ralat maut, ralat parse). Apr 08, 2025 am 12:03 AM

Terdapat empat jenis kesilapan utama dalam PHP: 1.Notice: yang paling sedikit, tidak akan mengganggu program, seperti mengakses pembolehubah yang tidak ditentukan; 2. Amaran: Serius daripada notis, tidak akan menamatkan program, seperti tidak mengandungi fail; 3. FatalError: Yang paling serius, akan menamatkan program ini, seperti tidak memanggil fungsi; 4. ParseError: Kesalahan sintaks, akan menghalang program daripada dilaksanakan, seperti lupa untuk menambah tag akhir.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Apr 17, 2025 am 12:06 AM

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP dalam Tindakan: Contoh dan aplikasi dunia nyata PHP dalam Tindakan: Contoh dan aplikasi dunia nyata Apr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP: Bahasa utama untuk pembangunan web PHP: Bahasa utama untuk pembangunan web Apr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

Apakah kaedah permintaan HTTP (dapatkan, pos, letakkan, padam, dll) dan kapan masing -masing harus digunakan? Apakah kaedah permintaan HTTP (dapatkan, pos, letakkan, padam, dll) dan kapan masing -masing harus digunakan? Apr 09, 2025 am 12:09 AM

Kaedah permintaan HTTP termasuk GET, POST, PUT dan DELETE, yang digunakan untuk mendapatkan, menghantar, mengemas kini dan memadam sumber masing -masing. 1. Kaedah GET digunakan untuk mendapatkan sumber dan sesuai untuk operasi membaca. 2. Kaedah Pos digunakan untuk menyerahkan data dan sering digunakan untuk membuat sumber baru. 3. Kaedah Put digunakan untuk mengemas kini sumber dan sesuai untuk kemas kini lengkap. 4. Kaedah Padam digunakan untuk memadam sumber dan sesuai untuk operasi penghapusan.

Terangkan perbezaan antara diri ::, ibu bapa ::, dan statik :: dalam php oop. Terangkan perbezaan antara diri ::, ibu bapa ::, dan statik :: dalam php oop. Apr 09, 2025 am 12:04 AM

Dalam phpoop, diri :: merujuk kepada kelas semasa, ibu bapa :: merujuk kepada kelas induk, statik :: digunakan untuk mengikat statik lewat. 1.Self :: digunakan untuk kaedah statik dan panggilan berterusan, tetapi tidak menyokong pengikatan statik lewat. 2.Parent :: digunakan untuk subkelas untuk memanggil kaedah kelas induk, dan kaedah peribadi tidak dapat diakses. 3.Static :: Menyokong pengikatan statik lewat, sesuai untuk warisan dan polimorfisme, tetapi boleh menjejaskan kebolehbacaan kod.

Bagaimana PHP mengendalikan fail memuat naik dengan selamat? Bagaimana PHP mengendalikan fail memuat naik dengan selamat? Apr 10, 2025 am 09:37 AM

PHP mengendalikan fail muat naik melalui pembolehubah fail $ \ _. Kaedah untuk memastikan keselamatan termasuk: 1. Semak kesilapan muat naik, 2. Sahkan jenis dan saiz fail, 3. Mencegah penindasan fail, 4. Pindahkan fail ke lokasi storan tetap.

See all articles