简单生活 发表于 2015-2-3 23:32:57

PHP网站制作之PHP企业级使用缓存手艺详解

讲了这么多,无非是想说:学习PHP不仅要掌握方法,更多的是付出汗水,我不希望看到中途放弃的人,相信自己,相信自己的选择,更要相信自己的能力,如果自己想放弃,暴力一点的话,就自己抽自己一个嘴巴。   
  之前咱们曾深切的切磋过PHP缓存手艺,个中次要提到了数据缓存。数据缓存次要是指数据库查询缓存,每次会见页面的时分,城市先检测响应的缓存数据是不是存在,假如不存在,就毗连数据库,失掉数据, 并把查询了局序列化后保留到文件中,今后一样的查询了局就直接从缓存表或文件中取得。
  用的最广的例子看Discuz的搜刮功效,把了局ID缓存到一个表中,下次搜刮不异关头字时先搜刮缓存表。
  举个经常使用的办法,多表联系关系的时分,把附表中的内容生成数组保留到主表的一个字段中,需求的时分数组分化一下,如许的优点是只读一个表,害处就是两个 数据同步会多很多步调,数据库永久是瓶颈,用硬盘换速度,是这个的关头点。
  页面缓存
  每次会见页面的时分,城市先检测响应的缓存页面文件是不是存在,假如不存在,就毗连数据库,失掉数据,显示页面并同时生成缓存页面文件,如许下次会见 的时分页面文件就发扬感化了。(模板引擎和网上罕见的一些缓存类凡是有此功效)
  工夫触发缓存
  反省文件是不是存在而且工夫戳小于设置的过时工夫,假如文件修正的工夫戳比以后工夫戳减去过时工夫戳大,那末就用缓存,不然更新缓存。
  内容触发缓存
  当拔出数据或更新数据时,强迫更新缓存。
  静态缓存
  这里所说的静态缓存是指静态化,直接生成HTML或xml等文本文件,有更新的时分更生成一次,合适于不太变更的页面,这就不说了。
  内存缓存
  Memcached是高功能的,散布式的内存对象缓存体系,用于在静态使用中削减数据库负载,提拔会见速度。
   
  <?php
  $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);
  ?>
   
  读库的例子:
   
  <?php
  $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之类的。
   
  
  ……
  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 &ndash; $remote_user [$time_local] “$request” ‘
  ‘$status $body_bytes_sent “$http_referer” “$http_user_agent” ‘;
  #——————————————————————&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;
  }
  }
  
  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>
然后大吼:别人可以,我为什么就不可以?(是不是有点阎罗教练的味道,默默的确是电影看多了,抽嘴巴是会痛的,各位其实明白这个道理了就行了)

蒙在股里 发表于 2015-2-4 02:03:28

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

爱飞 发表于 2015-2-9 23:17:56

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

兰色精灵 发表于 2015-2-10 23:49:22

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

变相怪杰 发表于 2015-3-1 17:59:34

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

灵魂腐蚀 发表于 2015-3-10 21:38:41

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

小魔女 发表于 2015-3-17 09:37:11

做为1门年轻的语言,php一直很努力。

仓酷云 发表于 2015-3-17 22:08:08

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

不帅 发表于 2015-3-22 17:08:21

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

小女巫 发表于 2015-3-31 22:23:52

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

分手快乐 发表于 2015-4-1 02:10:55

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

admin 发表于 2015-4-14 19:33:12

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

飘飘悠悠 发表于 2015-4-20 12:31:27

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

莫相离 发表于 2015-5-1 07:23:57

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

第二个灵魂 发表于 2015-5-4 08:33:18

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

愤怒的大鸟 发表于 2015-5-6 04:08:51

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

再见西城 发表于 2015-5-6 05:12:22

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

老尸 发表于 2015-5-6 23:11:14

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

只想知道 发表于 2015-5-10 07:19:58

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
页: [1]
查看完整版本: PHP网站制作之PHP企业级使用缓存手艺详解