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调用三种数据库的方法(2)
Oct 09 PHP
优化使用mysql存储session的php代码
Jan 10 PHP
php入门学习知识点二 PHP简单的分页过程与原理
Jul 14 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
PHP写日志的实现方法
Nov 05 PHP
php生成RSS订阅的方法
Feb 13 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP中PDO事务处理操作示例
May 02 PHP
PHP实现倒计时功能
Nov 16 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
laravel安装和配置教程
2014/10/29 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
js实现双色球效果
2020/08/02 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
tensorflow如何批量读取图片
2019/08/29 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
护理自荐信
2013/10/22 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
银行学习十八大感想
2014/01/11 职场文书
英文自荐信常用句子
2014/03/26 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
家长会主持词开场白
2015/05/29 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
python flask开发的简单基金查询工具
2021/06/02 Python
python 中的jieba分词库
2021/11/23 Python