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 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
简单易用的计数器(数据库)
Oct 09 PHP
php利用cookie实现访问次数统计代码
May 19 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
PHP数组常用函数实例小结
Aug 20 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
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
window.onload使用指南
2015/09/13 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
python 实现目录复制的三种小结
2019/12/04 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
《梅兰芳学艺》教学反思
2014/02/24 职场文书
企业活动策划方案
2014/06/02 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
幼儿生日活动方案
2014/08/27 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
致接力运动员加油稿
2015/07/21 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python