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 相关文章推荐
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
PHP Zip压缩 在线对文件进行压缩的函数
May 26 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
PHP 99乘法表的几种实现代码
Oct 13 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的面试题集
2006/11/19 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP 微信支付类 demo
2015/11/30 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
python常规方法实现数组的全排列
2015/03/17 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
详解pandas赋值失败问题解决
2020/11/29 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
后勤人员自我鉴定
2013/10/20 职场文书
工资证明格式模板
2015/06/12 职场文书