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 相关文章推荐
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php中explode函数用法分析
Nov 15 PHP
php清除和销毁session的方法分析
Mar 19 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
thinkphp5使用无限极分类
Feb 18 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 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数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
理解JSON:3分钟课程
2011/10/28 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
JS中操作JSON总结
2020/12/06 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
ionic3 懒加载
2017/08/16 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
python计算时间差的方法
2015/05/20 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
项目管理计划书
2014/01/09 职场文书
施工安全员岗位职责
2015/04/11 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python