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 SQLite类
May 07 PHP
php 过滤器实现代码
Aug 09 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
cakephp打印sql语句的方法
Feb 13 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
php版微信返回用户text输入的方法
Nov 14 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
在JavaScript中调用php程序
2009/03/09 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
纯js实现隔行变色效果
2017/11/29 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
用js实现放大镜效果
2020/10/28 Javascript
初学Python实用技巧两则
2014/08/29 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
提高python代码运行效率的一些建议
2020/09/29 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
"序列点" 是什么
2016/07/29 面试题
应届大学生自荐信
2013/12/05 职场文书
开学典礼感言
2014/02/16 职场文书
老师对学生的寄语
2014/04/09 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
新农村建设标语
2014/06/24 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书