关闭

PHP网页缓存技术

307人阅读 评论(0) 收藏 举报
分类:

个人总结:

前台静态化:把动态页面解析后保存为静态页面

文件缓存:把查询结果保存为文件,XML

内存缓存:memcache

php缓存器:XCache、eaccelerator等

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像视频文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。  Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。  Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。

XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.

******************************************************************************************************************************************************

1、普遍缓存技术:

  数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

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

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

2、 页面缓存:

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

3、 时间触发缓存:

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

4、 内容触发缓存:

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

5、 静态缓存:

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


以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到

6、 内存缓存:

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

7、 php的缓冲器:

   有eaccelerator, apc, phpa,xcache,这个这个就不说了吧,搜索一堆一堆的,自己看啦,知道有这玩意就OK

8、 MYSQL缓存:

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

9、 基于反向代理的Web缓存:

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

10、 DNS轮询:  
  BIND是一款开放源码的DNS服务器软件,这个要说起来就大了,自己搜索去,大家知道有这个东西就行了。
  我知道的有chinacache等大站就是这样做的,说简单点就是多服务器啦,把同一个页面或文件缓存到不同的服务器上,按南北自动解析到相关的服务器中。


PHP网页缓存实例

 

ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;
ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~ :)
ob_end_flush():表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。
用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。

首先,设定过期时间,如果要求缓存文件2个小时过期,就可以设定cache_time为3600*2;通过filectime()来获取缓存文件的创建时间(或 filemtime()获取修改时间),如果当前时间跟文件的创建时间超过限定的过期时间,就可以通过上面三个函数,首先从数据库中取出数据,然后开始缓存ob_start(),然后把要生成的页面的html代码写在缓存中,缓存结束后通过ob_get_contents()获取到缓存的内容,然后通过fwrite把缓存内容写到静态页面html。

如果未过期,直接读取cache中的静态页面即可,避免了大量的数据库访问。

  1. <?php  
  2. $_time =10;  
  3. $dir="D:\\php\\" 
  4.   
  5. function cache_start($_time$dir 
  6.  
  7.   $cachefile $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html' 
  8.   $cachetime $_time 
  9.   ob_start();  
  10.   if(file_exists($cachefile&& (time()-filemtime($cachefile$cachetime))  
  11.    
  12.     include($cachefile);  
  13.     ob_end_flush();  
  14.     exit 
  15.    
  16.  
  17.   
  18. function cache_end($dir 
  19.  
  20.   $cachefile $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html' 
  21.   $fp fopen($cachefile'w');  
  22.   fwrite($fpob_get_contents());  
  23.   fclose($fp);  
  24.   ob_end_flush();  
  25.  
  26.   
  27. cache_start($_time$dir);  
  28. //以下是输出的内容,放在cache_start和cache_end两个方法之间  
  29. for ($i=0;$i<5;$i++)  
  30.  
  31.   echo $i 
  32.   sleep(1);  
  33.  
  34. cache_end($dir);  
  35. ?>   
0
0
查看评论

基础知识之php页面缓存实现方法总结

PHP页面缓存实现的方法总结 在php页面缓存主要用到的是ob系列函数: ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中; ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,...
  • hanjianqiang2468
  • hanjianqiang2468
  • 2016-09-21 19:26
  • 2107

php 禁止页面缓存代码

很多时候,比如论坛的登录退出状态,都需要及时的更改;验证码的点击更换,想象下,如果这些都在缓存中,你会遇到什么问题,举个例子吧,如果一个验证码,无论用户怎么点击更换,都显示一个,那验证码还有意义吗,万一那个验证码实在是不容易识别岂不是更加糟糕。      &#...
  • yun__yang
  • yun__yang
  • 2016-03-16 16:06
  • 5977

PHP常用缓存技术的总结

1、全页面静态化缓存:将页面全部生成为HTML静态页面,用户访问时直接访问静态页面,不走PHP服务器的解析流程。此种方式在CMS系统中比较常见,如dedecms。 实现方法:输出缓存 ob_start()--打开“输出控制缓冲”; some code --要运行的代码; $content=o...
  • ym_diver
  • ym_diver
  • 2017-07-01 18:23
  • 190

浅谈php的缓存机制之redis

适合刚学习redis的读读,直接上代码吧,全是基础,全有注释 <?php $redis = new redis(); $redis->connect('127.0.0.1', 6379); //设置twjteststring $redis->setex('...
  • u010674395
  • u010674395
  • 2015-07-09 14:55
  • 2242

缓存技术,封装好的缓存类

using System; using System.Collections.Generic; using System.Linq; using System.Web; using EnYuan.BSS.BlindTasting; using EnYuan.BSS.BlindTasting.Dto;...
  • lybwwp
  • lybwwp
  • 2014-01-14 08:59
  • 3115

网站优化的关键技术:页面静态化和缓存

网页静态化就是通过生成HTML文件的方式,让用户尽可能多的访问HTML文件,而不是老是调用数据库生成网页。这样可以降低服务器的负载。生成网页的语句其实很简单,可以分为2部分,第一部分是组织模板: context ={}里面放入需要传到网页的内容 temp = loader.get_templat...
  • Laqide
  • Laqide
  • 2017-12-08 22:54
  • 215

高效网站开发缓存技术应用——网页输出缓存

网页输出缓存 是 ASP.NET 缓存中的重要组成部分。网页输出缓存又分为:完整页缓存、用户控件缓存 和 缓存后替换。下面我们先来学习一下 ——完整页缓存!        使用@OutputCache 可以已声明的方式控制ASP.NET页或页...
  • u011966339
  • u011966339
  • 2016-11-16 09:14
  • 202

php apc缓存以及与redis的对比

APC简介 APC的全称为Alternative PHP Cache, 是一款开源的php插件,用来对php的代码或者用户数据进行缓存。 APC 对php代码的缓存 apc可以去掉php动态解析以及编译的时间,php脚本可以执行的更快。下面这张图很好的说明了为什么了apc可以让...
  • w18704622664
  • w18704622664
  • 2015-07-29 18:31
  • 3325

php缓存技术之静态缓存

缓存技术 1.静态缓存 2.Memcache redis缓存 静态缓存 保存在磁盘上的静态文件,用PHP生成数据放入静态文件中 PHP操作缓存 1.生成缓存 2.获取缓存 3.删除缓存
  • ghostyusheng
  • ghostyusheng
  • 2016-02-18 14:23
  • 2612

PHP之分布式缓存memcached熟悉和操作

如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作;作为PHP开发人员,我们一般能想到的方法有页面静态化处理、防盗链、CDN内容分发加速访问、mysql数据库优化建立索引、架设apache服务器集群()、还有就是现在流行的各种分布式缓存技术:如memca...
  • wyz365889
  • wyz365889
  • 2015-03-25 00:25
  • 2589
    个人资料
    • 访问:94999次
    • 积分:1324
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:83篇
    • 译文:0篇
    • 评论:3条
    最新评论