问题:最近数据库经常出现链接数太多(Too many connections)而挂掉,如何解决这种问题?
方法:使用PHP动态缓存技术
可配合解决方案:
一,修改MySQL配置,增加链接数,由于使用虚拟空间,无法进行此修改,放弃。
二,增加Memcache缓存,同样如上情况,放弃。
以上两种方法只能临时性的减少数据库查询,但不能从根本上解决问题,不管怎么样,数据库查询还是必不可少,同样会导致链接数太多的挂掉网站。
三,PHP页面动态缓存,这个是可以做的,而且是非常值得去做的。下面就谈谈如何使用PHP实现动态缓存。
PHP实现缓存无非就两种(APC等工具不包括)形式,一种是静态缓存,一种是动态缓存,这两种区别在于,静态缓存的东西改动很小,几乎不会改动, 如一些头部内容,脚部版权内容等等,而对于一些列表页,评论页等就需要实现动态缓存,因为它们会不定期在变化。对于一个网站来说,就需要把这两种缓存方法 有效的结合起来,那如何结合使用,下面是我的思路。

一,以主页列表页为例
1,HTML模板部分
- <?php include('header.phtml');?>
- <div id="container">
- <div id="right">
- <!-- 文章列表开始 -->
- <?php echo $postLists; ?>
- <!-- 文章列表结束 -->
- </div>
- <div id="left">
- <?php include('sidebar.phtml') ?>
- </div>
- </div>
- <?php include('footer.phtml') ?>
我们发现,在HTML模板部分,有一个变量$postLists,这是需要获取动态缓存数据的,同时其中header.phtml、sidebar.phtml和footer.phtml将读取永久缓存,如上图
2,PHP部分
- class index{
- public function getPostLists(){
- if(!$postLists = $this->getFormCache('postLists')){
- $postLists = $this->getFromDataBase();//查询数据库
- if(!$postLists){
- return '';
- }
- $this->setToCache($postLists,'postLists');//新建静态缓存
- }
- return $postLists;
- }
- }
类中方法getPostLists实现读取动态缓存接口,如果使用getFormCache从缓存中获取到文章列表数据,则直接返 回$postLists列表数据,否则使用getFromDataBase()查询数据库,然后通过setToCache再把查询到的数据写入静态缓存 中。当下面次查询时,就直接从缓存中获取,这样就减少了数据库查询的压力,同时也提高了网站的访问速度。
上面只是一个简单的实例,要实现PHP动态缓存技术,首先要明确数据需要的缓存时间,要及时更新缓存,这样才能保证显示数据能与数据库同步,同时要掌握数据的情况,大家在实际使用时可根据具体情况具体应用。