前段时间,写了一篇 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缓存机制二[清除缓存方法]的更多相关文章

  1. Solr4.8.0源码分析(19)之缓存机制(二)

    Solr4.8.0源码分析(19)之缓存机制(二) 前文<Solr4.8.0源码分析(18)之缓存机制(一)>介绍了Solr缓存的生命周期,重点介绍了Solr缓存的warn过程.本节将更深 ...

  2. [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

    [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...

  3. SDWebimage如何获取缓存大小以及清除缓存

    sdwebimage如何获取缓存大小以及清除缓存 1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize {    float totalSize = 0; ...

  4. Android记录20-获取缓存大小和清除缓存功能

    Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存 ...

  5. Hibernate 缓存机制二(转)

    感谢:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...

  6. MyBatis缓存机制(一级缓存,二级缓存)

    一,MyBatis一级缓存(本地缓存) My Batis 一级缓存存在于 SqlSession 的生命周期中,是SqlSession级别的缓存.在操作数据库时需要构造SqlSession对象,在对象中 ...

  7. 彻底理解浏览器的缓存机制(http缓存机制)

    一.概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步s ...

  8. Mybatis学习(五)————— 延迟加载和缓存机制(一级二级缓存)

    一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybati ...

  9. Mybatis(五) 延迟加载和缓存机制(一级二级缓存)

    踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的 ...

随机推荐

  1. Apache common exec包的相应使用总结

      最近在写一个Java工具,其中调用了各种SHELL命令,使用了Runtime.getRuntime().exec(command);这个方法.但是在我调用某个命令执行操作时,程序就卡在那了,但是其 ...

  2. 浏览器发起Get,Post请求时候传递的参数编码问题

    浏览器发起Get,Post请求时候传递的参数编码问题 最近开发一个网站的时候,用了很多ajax方法,在页面发起Get,post请求,中间自然捎带有很多参数,有中文,有英文,英文一般是不存在编码问题的, ...

  3. (转) Linux下Setuid命令!

    在Linux系统中每个普通用户都可以更改自己的密码,这是合理的设置. 问题是:用户的信息保存在文件/etc/passwd中,用户的密码保存在文件/etc/shadow中,也就是说用户更改自己密码时是修 ...

  4. centos7 端口开放

    CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables.下面记录如何使用firewalld ...

  5. 判断当前Selection是否为prefab

    [判断当前Selection是否为prefab] PrefabUtility.GetPrefabParent(target) == null && PrefabUtility.GetP ...

  6. Application.LoadLevel & Object.DontDestroyOnLoad

    [Application.LoadLevel] 只有在File->Build Setting中设置了的按钮才能被加载. 当level加载完成后,MonoBehaviour.OnLevelWasL ...

  7. 一张图片优化5k带来的带宽成本及其前端页面的优化方法

    上周,我参加了公司的一门课程<网站性能优化>,讲师提出了一个问题:一张图片优化后减少5K,1年内可以大概省下多少宽带成本呢?非常好奇,仔细听完讲师分析,计算出来的数据让小伙伴们都惊呆了,仅 ...

  8. launcher启动应用重启的BUG解决

    最近遇到了一个问题,从launcher重新进入已经运行的应用会直接跳到应用的第一个界面. 经过对应用的跟踪,结合网络上的资料 http://stackoverflow.com/questions/19 ...

  9. Jquery循环select标签,并给指定option添加select属性后在页面上不显示的问题

    <select id="testId"> <option value="">--请选择--</option> <opt ...

  10. iOS 打印结构体

    关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...