smarty缓存用法分析


Posted in PHP onDecember 16, 2014

本文详细分析了smarty缓存的用法。分享给大家供大家参考。具体分析如下:

一开始以为smarty只是用来做一些掩饰php代码功能,但是后来才知道还有模板缓存这个强大的功能。

什么是模板缓存呢,就是我们在从数据库里面取出一些数据输出到模板的访问的时候,每一次都对数据库进行访问,但是其实每一次的数据库访问都是相同的,假如网址的流量很大,这种重复的访问完全是没有必要的,对于数据库有很大压力。smarty就提供了缓存技术,用于解决这个问题。

首先使用smarty的缓存,我们有一些要设置的:

开启缓存

$Smarty->caching = true;

设置缓存周期

$Smarty->cache_lifetime = 30;

设置缓存目测

$Smarty->cache_dir = './cache';

然后对于数据库访问的那一部分,我们首先做一次判断,是否已经对此部分进行过缓存了

if(!$Smarty->isCached('01.html')){//判断是否已经进行过缓存,如果已经进行过就不走这里,直接输出模板  

    $conn = mysql_connect('localhost','root','root');  

    mysql_query('set names utf8');  

    mysql_query('use market');  

    $rs = mysql_query('select goods_id,goods_name,shop_price,add_time from goods where goods_id = ' . $goods_id,$conn);  

    $goods =array();  

    while($row = mysql_fetch_assoc($rs)){  

        $goods[] = $row;  

    }  

    echo '走了数据库';  

    $Smarty->assign('goods);  

}

但是在smarty的缓存里面还有需要注意的地方,就是假如从地址栏里面get的参数,那么就有可能影响到缓存,多个不同的参数只缓存了第一次生成的,所以这里就需要用到单模板多缓存技术,其实也很简单,只要在
$Smarty->assign('goods',$goods);
这里添加了一个参数,这个参数就是从地址栏获取的,当然,在判断的时候也需要把参数添加进去判断是否已经缓存了
$Smarty->isCached('01.html',goods_id);

那么这个缓存要怎么删除呢,很简单,只需要调用

$Smarty->clearCache('01.html',$goods_id)
第二个参数可选,假如不填就直接删除这个模板下面的所有缓存。
最后,有时候在调试程序的时候不缓存,我们也可以设置这个参数用于暂时停止缓存:
$Smarty->force_cache = true;

最后有一点注意,缓存的生命周期是指,在这个时间过了以后,再次刷新这个页面会用新的缓存代替旧的,假如不产生新的缓存,那么旧的缓存是不会自动删除的,所以在实际项目开发中,假如缓存很多的话,其实也是很影响存储的。

其实我们需要缓存的也只是很少一部分的HTML,现在很多站都使用了memcached来缓存。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
PHP实现的MongoDB数据库操作类分享
May 12 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
php实现点击可刷新验证码
Nov 07 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
php简单实现多语言切换的方法
May 09 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 #PHP
smarty表格换行实例
Dec 15 #PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 #PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 #PHP
PHP缓存集成库phpFastCache用法
Dec 15 #PHP
php图片的二进制转换实现方法
Dec 15 #PHP
php第一次无法获取cookie问题处理
Dec 15 #PHP
You might like
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
php报错502badgateway解决方法
2019/10/11 PHP
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
Vue3为什么这么快
2020/09/23 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
Python Queue模块详解
2014/11/30 Python
python使用多线程不断刷新网页的方法
2015/03/31 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
Python实现AI换脸功能
2020/04/10 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
医校毕业生自我鉴定
2014/01/25 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
2014年母亲节寄语
2014/05/07 职场文书
经销商年会策划方案
2014/05/29 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
管理人员岗位职责
2015/02/14 职场文书
让生命充满爱观后感
2015/06/08 职场文书