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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
基于simple_html_dom的使用小结
Jul 01 PHP
php获取文件大小的方法
Feb 26 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
php删除数组中重复元素的方法
Dec 22 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 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下一个非常全面获取图象信息的函数
2008/11/20 PHP
PHP计数器的实现代码
2013/06/08 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Django stark组件使用及原理详解
2019/08/22 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python opencv如何实现图片绘制
2020/01/19 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
客户代表自我评价范例
2013/09/24 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
文明风采获奖感言
2014/02/18 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
Java字符串逆序方法详情
2022/03/21 Java/Android
Python实现数据的序列化操作详解
2022/07/07 Python