thinkphp缓存技术详解_PHP

WBOY
Release: 2016-05-31 18:15:35
Original
729 people have browsed it

本文详细分析了thinkphp的缓存技术。分享给大家供大家参考。具体分析如下:

如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数据库存取层,如果没有缓存层,访问层是直接从数据库存取层读取数据,而设置缓存后,访问层不再是直接在数据库存取层读取,而是从缓存层读取数据.

我们做个简单的对比,假设一个页面,在一个小时可被访问100万次,如果这个页面每次被访问的时候,都直接读取数据库后再编译生成,在一个小时内将会重复性的生成100万次,而如果这个页面被周期性的缓存10分钟,也就是每间隔10分钟缓存数据才会被生成一次,一个小时内只会被生成6次,两种方式一对比,效果明显,两种比较下服务器负荷的压力比差别十几万倍以上,缓存技术将使得网站负载在高峰期游刃有余.

thinkphp的缓存方式有许多种,如File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache,现在我来说一下File缓存。

Thinkphp缓存文件的配置

Home是我建立的前台项目,在Home\Conf\config.php找到缓存的配置文件,配置如下:

代码如下:

  return array(      
  'DB_TYPE'=>'mysql',      
  'DB_HOST'=>'127.0.0.1',      
 'DB_NAME'=>'w3note',      
  'DB_USER'=>'root',      
 'DB_PWD'=>'123456',      
 'DB_PORT'=>'3306',      
 'DB_PREFIX'=>'w3_',      
 'DATA_CACHE_TYPE'=>'file',//设置缓存方式为file      
 'DATA_CACHE_TIME'=>'600',//缓存周期600秒      
);      
?>


Thinkphp缓存函数的使用

在thinkphp中,我喜欢使用快捷缓存函数S()进行缓存,其用法如下:

代码如下:

S('data',$Data);//使用data标识缓存$Data数据 
S('data',$Data,600);// 缓存$Data数据600秒 
$Data = S('data');// 获取缓存数据 
S('data',NULL);// 删除缓存数据


下面是是前台项目控制器的完整代码:

代码如下:

// 本类由系统自动生成,仅供测试用途      
 class IndexAction extends Action{      
   public function index(){      
       //如果有缓存,则读取缓存数据      
       //如果没有缓存,则读取数据库当中的数据放入缓存      
       $lists=S('lists');                    
       if(emptyempty($lists)){                          
         $news=M('news');  
         $lists=$news->select();  
         S('lists',$lists,600);  
         echo '这是直接读取数据库的数据';      
          }  
       dump($list); 
?>


访问http://127.0.0.1/Home/index.php/Index/index 输出,这是直接读取数据库的数据:

代码如下:

array(10) { 
  [0] => array(12) { 
    ["id"] => string(1) "1" 
    ["catid"] => string(2) "13" 
    ["title"] => string(4) "thinkphp的缓存技术" 
    ["content"] => string(8) "thinkphp的缓存技术" 
    ["tags"] => string(4) "缓存" 
    ["thumb"] => string(0) "" 
    ["description"] => string(7) "thinkphp的缓存技术" 
    ["inputtime"] => string(10) "1348370202" 
    ["posid"] => string(1) "1" 
    ["ord"] => string(1) "2" 
    ["hits"] => string(1) "1" 
    ["status"] => string(1) "1" 
}


说明,第一次运行时,会打印出如上面所示信息,刷新一下页面后,少了“ 这是直接读取数据库的数据",说明读取的是先前生成的缓存数据.

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template