php抓取网页数据实例( PHP缓存机制静态化:把动态页面解析后保存为文件)

优采云 发布时间: 2021-09-26 00:14

  php抓取网页数据实例(

PHP缓存机制静态化:把动态页面解析后保存为文件)

  

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

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

  内存缓存:memcache

  php缓存:XCache、eaccelerator等。

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

  XCache 是一个开源操作码缓存/优化器,这意味着它可以提高 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,更不用说这个了

  8、 MYSQL 缓存:

  这个也是非代码级别的,经典数据库就是这样使用的,看下面的运行时间,比如0.09xxx

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

  如Nginx、SQUID、mod_proxy(apache2及以上分为mod_proxy和mod_cache)

  10、 DNS 轮询:

  BIND 是一个开源的 DNS 服务器软件。这是一件大事。自行搜索。每个人都知道有这个东西。

  我知道有些大网站比如chinacache就是这样做的。简单来说,就是多台服务器。同一个页面或文件缓存在不同的服务器上,根据南北自动解析到相关服务器。

  PHP 网页缓存示例

  有了这三个php函数,就可以实现强大的功能。如果数据库查询量很大,可以使用缓存来解决这个问题。

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

  如果没有过期,直接读取缓存中的静态页面,避免大量的数据库访问。

<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线