热门标签 | 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 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文详细介绍了如何解决 Microsoft SQL Server 中用户 'sa' 登录失败的问题。错误代码为 18470,提示该帐户已被禁用。我们将通过 Windows 身份验证方式登录,并启用 'sa' 帐户以恢复其访问权限。 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • 本文介绍了如何通过在数据库表中增加一个字段来记录文章的访问次数,并提供了一个示例方法用于更新该字段值。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • MySQL Debug 模式的实现与应用
    本文详细介绍了如何启用和使用 MySQL 的调试模式,包括编译选项、环境变量配置以及调试信息的解析。通过实际案例展示了如何利用调试模式解决客户端无法连接服务器的问题。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • Linux环境下Memcached安装指南
    本文详细介绍如何在Linux虚拟机上安装Memcached,包括必要的依赖库安装,以及使用Xshell进行文件传输的具体步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文档介绍了如何在Visual Studio 2010环境下,利用C#语言连接SQL Server 2008数据库,并实现基本的数据操作,如增删改查等功能。通过构建一个面向对象的数据库工具类,简化了数据库操作流程。 ... [详细]
  • 成为一名高效的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社区 版权所有