全面剖析Smarty缓存机制二[清除缓存方法]
前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存、部分缓存、局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成。本来这篇早该完成,由于时间关系推到今天,还好思绪没有忘掉,闲话不多说,今天主要讲解Smarty缓存机制中如何清除缓存以及缓存集合的使用技巧,下面步入正题。
一、普通清除缓存方法
总所周知,当你看了上一篇文章,会知道通过如下方法,对Smarty的缓存进行清除:
代码示例:
$smarty->clear_cache(“index.tpl”);//清除一个模板的缓存;
$smarty->clear_cache(“index.tpl”, $cache_Id);//清除一个带缓存编号的缓存;如:页面http://www.abc.com/index.asp?act=login,可以将$cache_id设为login;
$smarty->clear_all_cache();//清除所有缓存,即缓存目录下所有缓存文件;
这样就存在一个问题,比方网站有一个栏目:http://blog.unvs.cn/archives/php/ ,我只想清除这一个栏目的页面缓存而不想全部清除或一个页面缓存,这种情况经常会碰到,那么,接下来会讲到Smarty引擎中强大的缓存集合方法。
二、清除缓存集合方法
Smarty中文教程是这样描述的:可以通过建立cache_id集合做更详细的集合体,在cache_id集合里用竖线“|”来分开子集合。可以尽可能多的包含子集合。
上面解释的有点云里雾里,简单点说,就是在建立缓存中,将cache_id以一个带集合标识保存,用竖线隔开集合标识与缓存编号,而不仅仅是单一缓存编号,如:
$smarty->display(“index.tpl”, "category|".$cache_id);//前面加了一个 category| 的前缀,表明将把缓存编号为$cache_id保存在category集合里,可以理解为分组;
这里添加一个缓存文件如何命名知识点,缓存文件命名生成规则:集合名称^_Site目录_页面名称_参数_页面名称编码md5加密
如下图所示:
(category属于一个集合,index属于一个集合)
刚将了集合的生成,下面关键如何清除集合下的缓存,方法如下:
$smarty->clear_cache(null, "category");//注意模板文件参数为null,""都不可以。
以上就完成了集合缓存的生成与清除,其实,网上也有这样一种方法:给一个栏目新建一个目录,比方news栏目,缓存生成放到一个news的缓存文件夹,这点不难,然后需要清除此栏目缓存时,缓存路径指向news即可。这个方法可行,个人觉得灵活性不高。
好了,关于Smarty缓存机制原理的讲解就完成了,当然这些只是实际开发常用的应用技巧,还有更多与缓存相关的函数、块什么的,不过掌握这些,相信Smarty缓存就可以运用自如了。
全面剖析Smarty缓存机制二[清除缓存方法]的更多相关文章
- Solr4.8.0源码分析(19)之缓存机制(二)
Solr4.8.0源码分析(19)之缓存机制(二) 前文<Solr4.8.0源码分析(18)之缓存机制(一)>介绍了Solr缓存的生命周期,重点介绍了Solr缓存的warn过程.本节将更深 ...
- [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能
[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...
- SDWebimage如何获取缓存大小以及清除缓存
sdwebimage如何获取缓存大小以及清除缓存 1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize { float totalSize = 0; ...
- Android记录20-获取缓存大小和清除缓存功能
Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存 ...
- Hibernate 缓存机制二(转)
感谢:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...
- MyBatis缓存机制(一级缓存,二级缓存)
一,MyBatis一级缓存(本地缓存) My Batis 一级缓存存在于 SqlSession 的生命周期中,是SqlSession级别的缓存.在操作数据库时需要构造SqlSession对象,在对象中 ...
- 彻底理解浏览器的缓存机制(http缓存机制)
一.概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步s ...
- Mybatis学习(五)————— 延迟加载和缓存机制(一级二级缓存)
一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybati ...
- Mybatis(五) 延迟加载和缓存机制(一级二级缓存)
踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的 ...
随机推荐
- 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址) ...
- kafka的OffsetOutOfRangeError
from kafka import KafkaClient, SimpleConsumer from sys import argv kafka = KafkaClient("10.0.1. ...
- Python Issue: ValueError unknown locale: UTF-8 on OS X (Spyder)
In your bash_profile you lack of something. add export LANG="en_US.UTF-8" export LC_COLLAT ...
- delphi 线程 TTask
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Threading.TTask http://docwiki.embarcader ...
- atl控件发布打包<转>
http://www.cnblogs.com/gengaixue/archive/2010/08/13/1799112.html ActiveX打包与发布 在VS2005或VS2008安装后发现路径* ...
- Abstract(抽象)
谈到抽象,就先谈谈面向对象语言的三大特性,也是人们口中常说的封装.继承.多态. 封装:什么是封装,按到我的理解,封装就是把某些类的相关属性和方法封装,对内实现数据影城,对外提供稳定接口. 继承:从字面 ...
- C++Primer笔记-----day01
=======================================================day01======================================== ...
- BMP文件结构(转)
[转自网络] BMP文件存储结构的格式可以在Windows中的WINGDI.h文件中找到定义. BMP文件总体上由4部分组成,分别是位图文件头.位图信息头.调色板和图像数据,如表5-1所示. 表5-1 ...
- iOS多线程编程之NSOperation和NSOperationQueue的使用
前一篇 <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是 ...
- 转载--js对象无法当成参数传递
今天我碰到了这个问题一头雾水,明明记得对象是可以传参的啊.我使用了一款基于bootstrap的表格插件DataTables,想把行信息直接传给操作函数,方便编辑(此行信息是一个对象,按道理可以的啊), ...