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邮件类
Jan 03 PHP
php 全文搜索和替换的实现代码
Jul 29 PHP
php smarty模版引擎中的缓存应用
Dec 11 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
PHP实现的一致性哈希算法完整实例
Nov 14 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
PHP程序员必须知道的两种日志实例分析
May 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 spl_autoload_register实现自动加载研究
2011/12/06 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
Python入门教程之运算符与控制流
2016/08/17 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
初婚初育证明
2014/01/14 职场文书
程序员求职信
2014/04/16 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电