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新手上路(七)
Oct 09 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
PHP的5个安全措施小结
Jul 17 PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 PHP
PHP防止注入攻击实例分析
Nov 03 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
php中各种定义变量的方法小结
Oct 18 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 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随机生成福彩双色球号码的2种方法
2013/02/04 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
php检测url是否存在的方法
2015/04/14 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
javascript中直接写php代码的方法
2013/07/31 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
2020/06/17 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
实现Python与STM32通信方式
2019/12/18 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
财务会计毕业生自荐信
2013/11/02 职场文书
后勤采购员岗位职责
2013/12/19 职场文书
关于打架的检讨书
2014/01/17 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书