实现PHP动态缓存技术实例

问题:最近数据库经常出现链接数太多(Too many connections)而挂掉,如何解决这种问题?
方法:使用PHP动态缓存技术

可配合解决方案:
一,修改MySQL配置,增加链接数,由于使用虚拟空间,无法进行此修改,放弃。
二,增加Memcache缓存,同样如上情况,放弃。
以上两种方法只能临时性的减少数据库查询,但不能从根本上解决问题,不管怎么样,数据库查询还是必不可少,同样会导致链接数太多的挂掉网站。
三,PHP页面动态缓存,这个是可以做的,而且是非常值得去做的。下面就谈谈如何使用PHP实现动态缓存。

PHP实现缓存无非就两种(APC等工具不包括)形式,一种是静态缓存,一种是动态缓存,这两种区别在于,静态缓存的东西改动很小,几乎不会改动, 如一些头部内容,脚部版权内容等等,而对于一些列表页,评论页等就需要实现动态缓存,因为它们会不定期在变化。对于一个网站来说,就需要把这两种缓存方法 有效的结合起来,那如何结合使用,下面是我的思路。
php缓存技术cache
一,以主页列表页为例
1,HTML模板部分

  1. <?php include('header.phtml');?>
  2. <div id="container">
  3. <div id="right">
  4. <!-- 文章列表开始 -->
  5. <?php echo $postLists; ?>
  6. <!-- 文章列表结束 -->
  7. </div>
  8. <div id="left">
  9. <?php include('sidebar.phtml') ?>
  10. </div>
  11. </div>
  12. <?php include('footer.phtml') ?>

我们发现,在HTML模板部分,有一个变量$postLists,这是需要获取动态缓存数据的,同时其中header.phtml、sidebar.phtml和footer.phtml将读取永久缓存,如上图

2,PHP部分

  1. class index{
  2. public function getPostLists(){
  3. if(!$postLists = $this->getFormCache('postLists')){
  4. $postLists = $this->getFromDataBase();//查询数据库
  5. if(!$postLists){
  6. return '';
  7. }
  8. $this->setToCache($postLists,'postLists');//新建静态缓存
  9. }
  10. return $postLists;
  11. }
  12. }

类中方法getPostLists实现读取动态缓存接口,如果使用getFormCache从缓存中获取到文章列表数据,则直接返 回$postLists列表数据,否则使用getFromDataBase()查询数据库,然后通过setToCache再把查询到的数据写入静态缓存 中。当下面次查询时,就直接从缓存中获取,这样就减少了数据库查询的压力,同时也提高了网站的访问速度。

上面只是一个简单的实例,要实现PHP动态缓存技术,首先要明确数据需要的缓存时间,要及时更新缓存,这样才能保证显示数据能与数据库同步,同时要掌握数据的情况,大家在实际使用时可根据具体情况具体应用。

共有0个回答