温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP缓存技术的实例应用

发布时间:2021-09-04 15:25:04 来源:亿速云 阅读:144 作者:chen 栏目:编程语言

本篇内容主要讲解“PHP缓存技术的实例应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP缓存技术的实例应用”吧!

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

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

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

页面缓存

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

时间触发缓存

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

内容触发缓存

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

静态缓存

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

内存缓存

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

<?php $memcache = new Memcache;  $memcache->connect(&lsquo;localhost&rsquo;, 11211) or die (“Could not connect”);  $version = $memcache->getVersion();  echo “Server&rsquo;s version: “.$version.”\n”;  $tmp_object = new stdClass;  $tmp_object->str_attr = &lsquo;test&rsquo;;  $tmp_object->int_attr = 123;  $memcache->set(&lsquo;key&rsquo;, $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(&lsquo;key&rsquo;);  echo “Data from the cache:\n”;  var_dump($get_result);  ?>

读库的例子:

<?php $sql = &lsquo;SELECT * FROM users&rsquo;;  $key = md5($sql);   //memcached 对象标识符  if ( !($datas = $mc->get($key)) ) {   //  在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集   echo “n”.str_pad(&lsquo;Read datas from MySQL.&rsquo;, 60, &lsquo;_&rsquo;).”n”;  $conn = mysql_connect(&lsquo;localhost&rsquo;, &lsquo;test&rsquo;, &lsquo;test&rsquo;);  mysql_select_db(&lsquo;test&rsquo;);  $result = mysql_query($sql);  while ($row = mysql_fetch_object($result))  $datas[] = $row;   //  将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用   $mc->add($key, $datas);  } else {  echo “n”.str_pad(&lsquo;Read datas from memcached.&rsquo;, 60, &lsquo;_&rsquo;).”n”;  }  var_dump($datas);  ?>

PHP的缓冲器

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

MySQL缓存

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

[client]  &hellip;&hellip;  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 &hellip;&hellip;  table_cache=512 &hellip;&hellip;  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 &hellip;&hellip;  thread_concurrency=8

基于反向代理的Web缓存

如Nginx,SQUID,mod_PRoxy(apache2以上又分为mod_proxy和mod_cache)

NGINX的例子:

<nginx.conf> #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  &lsquo;$remote_addr &ndash; $remote_user [$time_local] “$request” &lsquo;  &lsquo;$status $body_bytes_sent “$http_referer” “$http_user_agent” &lsquo;;  #&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;  #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;  }   }  <conf/proxy_setting.conf> 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的例子:

<VirtualHost *> 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 &ndash; 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  </VirtualHost>

到此,相信大家对“PHP缓存技术的实例应用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI