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 将excel导入mysql
Nov 09 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP如何实现跨域
May 30 PHP
php常用字符函数实例小结
Dec 29 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 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下实现农历日历的代码
2007/03/07 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
lib.utf.js
2007/08/21 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
初识Node.js
2015/03/20 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
React Router基础使用
2017/01/17 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python中强大的命令行库click入门教程
2016/12/26 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python将回车作为输入内容的实例
2018/06/23 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
联强国际笔试题面试题
2013/07/10 面试题
数据库方面面试题
2012/04/22 面试题
个人债务授权委托书
2014/10/17 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang