热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP缓存原理以及smarty缓存

前面学习过PHP缓冲技术,今天学习PHP的缓存技术,虽然一字之差,却也能说“谬以‘十’里”。

前面学习过PHP缓冲技术,今天学习PHP的缓存技术,虽然一字之差,却也能说“谬以‘十’里”。

一、PHP缓存原理

当我们访问一个网站时,查询或者登陆,都会和通过数据库获得信息。像一个很大的门户网站,每日访问量上百万、千万,数据流通量是庞大的,所以通过PHP缓存技术能避免一些频繁而不必要的数据库操作,从而提高程序执行的效率。

来看一下几个PHP缓存技术:

1、数据缓存——普遍的一种缓存技术

非常直观的字面意思,就是把数据先存放好,减少对数据库的访问。第一次访问时,把要用到的数据保存到一个文件里,然后用户再次访问页面时,就先检测要查询的数据是否在缓存文件里,若存在,则直接取出,不需再次访问数据库。

一般这些数据以数组的形式保存,比如ecshop的缓存。

2、页面缓存

和数据缓存差不多,每次访问页面时,就检测相应的页面缓存是否存在,若不存在,则查询数据库得到相应的数据,同时生成缓存页面,这样,在下次访问就可以直接取出缓存页面,不必再次查询数据库。

3、内存缓存

不作过多分析,一般熟借助第三方软件进行优化,比如Memcached、dbcached。

以 上方法能够解决频繁访问数据库的问题,但是缺乏时效性,在数据库改变后,他们默认的数据还是修改之前的。所以就要在规定时间内清除缓存,以更新数据。比如 在每次更新缓存后设定一个时间戳t1,当前的时间戳t2,规定缓存时间为T,那么,在t1与t2相差在T之内时,就不更新缓存,否则,超过了T,就重新查 询数据库,清除之前的缓存,又得到一个新的时间戳,依次循环下去。

二、smarty缓存

说到smarty又要注意两个概念:编译和缓存:smarty编译在默认情况下是开启的,而smarty缓存机制是要开发人员自己开启的。编译就是把smarty要编译的模板转换成PHP脚本程序,下次就可以直接访问编译好的PHP脚本程序,从而节省了程序执行的开销。

简单介绍一下smarty缓存技术:

1、开启缓存

要使用smarty缓存,首先开启缓存。先new一个smarty类,然后设置:$tpl = new Smarty();$tpl->caching = true;$tpl->cache_dir = '/cache/tp'

2、设定缓存更新周期

如果缓存永远不更新,那么网站就失去了动态性,下面就要设置一个缓存的更新周期:$tpl->cache_lifetime = 60*60; (以秒为单位)

另外对$tpl->caching要进行设置:

值为1:强迫不更新缓存:     值为2:在获取模板之前设置更新周期     值为0:强制不缓存,相当于false

所以设置更新周期cache_lifetime之前要设置caching = 2

3、一个模板,多个缓存

在缓存文章时,它们都用同一个模板,所以要区分开来。根据display或者fetch的第二个参数来设定:$tpl->display('article.php',$art_id)

4、is_cashed()更合理调用缓存

上面的一些缓存方法,虽然在下次访问页面不用在从数据库更新数据,但是之前的$sql查询数据库的语句还是执行的,这就增加了PHP的处理开销。

在执行$sql语句之前通过is_cached()判断缓存是否存在,例如:

   if( is_cached(article.html))

   {

             $sql = ...  //执行一系列$sql语句

   }

   $tpl->display('article.html');

  当这个模板有多个缓存时,可以带上第二个参数:is_cached('article.html',$art_id)

5、局部缓存或者不缓存

我们可以指定缓存页面里的某个部分:

现在smarty的插件目录下顶一个个插件函数:block.cacheless.php,代码如下:

  function smarty_block_cacheless($param, $content, &$smarty)

  {
     return $content;
  }
?>

还要修改smarty里的Smarty _Compiler.class.php,找到下面一行,把true改成false:

$this->_plugins['block'][$tag_command] =array($plugin_func, null, null, null, true)

 

然后在页面里可以用这个方法指定缓存:

<%$smarty.now%>这里的缓存  
  <%$smarty.now%>这里的不缓存<%/cacheless%>

6、清除缓存

$tpl->clear_all_cache(); //清除所有缓存

$tpl->clear_cache('file.html'); //清除指定的缓存

$tpl->clear_cache('article.html',$art_id);  //清除同一个模板下的指定缓存号的缓存


推荐阅读
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • Linux环境下Memcached安装指南
    本文详细介绍如何在Linux虚拟机上安装Memcached,包括必要的依赖库安装,以及使用Xshell进行文件传输的具体步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • 优化使用Apache + Memcached-Session-Manager + Tomcat集群方案
    本文探讨了使用Apache、Memcached-Session-Manager和Tomcat集群构建高性能Web应用过程中遇到的问题及解决方案。通过重新设计物理架构,解决了单虚拟机环境无法真实模拟分布式环境的问题,并详细记录了性能测试结果。 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
author-avatar
mb97ujp
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有