thinkphp缓存技术详解


Posted in PHP onDecember 09, 2014

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

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

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

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

Thinkphp缓存文件的配置

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

<?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);// 删除缓存数据

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

// 本类由系统自动生成,仅供测试用途       

 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程序设计有所帮助。

PHP 相关文章推荐
基于mysql的论坛(6)
Oct 09 PHP
php 时间计算问题小结
Jan 04 PHP
php修改指定文件后缀的方法
Sep 11 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 PHP
PHP 实现重载
Mar 09 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 #PHP
php生成shtml类用法实例
Dec 09 #PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 #PHP
php中adodbzip类实例
Dec 08 #PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 #PHP
PHP内存缓存Memcached类实例
Dec 08 #PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 #PHP
You might like
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
使用Python函数进行模块化的实现
2019/11/15 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
公司培训心得体会
2014/01/03 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
文明市民先进事迹
2014/05/15 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
企业趣味活动方案
2014/08/21 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
新娘婚礼致辞
2015/07/27 职场文书
商业计划书之服装
2019/09/09 职场文书
Python进程间的通信之语法学习
2022/04/11 Python
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android