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 相关文章推荐
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
php与php MySQL 之间的关系
Jul 17 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
linux中cd命令使用详解
Jan 08 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
在Laravel中使用MongoDB的方法示例
Nov 11 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php随机抽奖实例分析
2015/03/04 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
摘自启点的main.js
2008/04/20 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
详解如何较好的使用js
2016/12/16 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
用Webpack构建Vue项目的实践
2017/11/07 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
python正则实现提取电话功能
2018/02/24 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python字符串查找函数的用法详解
2019/07/08 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
写给保洁员表扬信
2014/01/08 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
激励员工的口号
2014/06/16 职场文书
教育合作协议范本
2014/10/17 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
总结Python使用过程中的bug
2021/06/18 Python
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript