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 相关文章推荐
投票管理程序
Oct 09 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
自定义php类(查找/修改)xml文档
Mar 26 PHP
php 地区分类排序算法
Jul 01 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
php如何获取文件的扩展名
Oct 28 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 PHP
PHP强制转化的形式整理
May 22 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php DES加密算法实例分析
2019/09/18 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
jQuery 全选效果实现代码
2009/03/23 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
python解析xml文件操作实例
2014/10/05 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
世界上最大的二手相机店:KEN
2017/05/17 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
七年级地理教学反思
2014/01/26 职场文书
工作证明英文模板
2014/10/21 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
谢师宴学生致辞
2015/07/27 职场文书
高二英语教学反思
2016/03/03 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python