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 相关文章推荐
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php array_search() 函数使用
Apr 13 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php读取文件内容的方法汇总
Jan 24 PHP
php递归创建目录的方法
Feb 02 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
yii添删改查实例
2015/11/16 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
python 自动识别并连接串口的实现
2021/01/19 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
优秀应届毕业生推荐信
2014/02/18 职场文书
跑操口号
2014/06/12 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
react 路由Link配置详解
2021/11/11 Javascript
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
Python实现对齐打印 format函数的用法
2022/04/28 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL