• 缓存


    什么叫缓存?

    定义:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从数据库也就是内存中找

    目的:程序运行起来更加快速。

    (也就是说当遇到大型网站时,它的数据访问量是相当大的,如果在点击同一个地方时每次都要访问数据库,那给数据库所造成的压力还有运行速度可想而知,所以我们这里就用到了缓存。)

    OK.  现在呢,我们来做一个缓存的小例子,以方便大家更好的认识缓存

    唉,等一下! 我差点忘了告诉你们,我这里呢是用的smarty模版做的小例子,所以,理解最重要。^_^

    首先:我们新建一个PHP后台处理界面取名叫test,把它保存在main(后台处理)文件夹里面。

    代码如下:

    <?php
    
    include("../init.inc.php");  //引入smarty模版文件
    include("../fengzhuang.class.php");  //引入封装类
    
    $db = new fengzhuang();
    
    $sql = "select * from rules";  //所查为rules表
    $attr = $db->query($sql);  //返回数组
    
    $smarty->assign("rules",$attr);
    $smarty->display("test.html");

    接下来,我们再建一个前端显示的页面取名为test.html, 把它保存在templates文件夹里面。

    代码如下(因为这张表非常简单,所以只用两列显示就够了):

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
    <table width="100%"; border="1" cellpadding="0" cellspacing="0">
        <tr>
            <td>代号</td>
            <td>名称</td>
        </tr>
        
        <{foreach $rules as $v}>
            <tr>
                <td><{$v[0]}></td>
                <td><{$v[1]}></td>
            </tr>
        <{/foreach}>
    </table>
    
    </body>
    </html>

    既然后台也有了,前端显示也有了,那么让我们来看一下所显示的界面是什么样的。

    到这里,我相信同学们已经迫不及待了。

    然后,也就是做缓存的开始。

    第一:我们要在后台处理页面里面,定义一个该页面的缓存文件路径(这里缓存为静态页面,保存在cache文件夹内)

    代码如下:

    $filename = "../cache.testhuancun.html";

    第二:判断一下缓存文件是否存在,当存在或不存在时,分别执行的内容

    代码如下:

    <?php
    
    $filename = "../cache.testhuancun.html";
    
    if(file_exists($filename))        //判断文件是否存在
    {
        ob_start();            //开启内存缓存
            
        include("../init.inc.php");
        include("../fengzhuang.class.php");
        
        $db = new fengzhuang();
        
        $sql = "select * from rules";
        $attr = $db->query($sql);
        
        $smarty->assign("rules",$attr);
        $smarty->display("test.html");
        
        //把内存里面的内容全部读出来,交给一个变量nr,现在nr里面就存了读取的内容了
        $nr = ob_get_contents();
        //将读到的内容存放到缓存文件
        file_put_contents($filename,$nr);
        
        ob_flush();            //清楚内存缓存
        
        //为了更好的识别此页面是否是缓存页面,我们输出一串#进行辨别。有#时是读的内存,无#时是读的缓存
        echo "#########################################################";
    }
    else
    {
        include($filename);
    }

    效果图如下(第一次刷新时,页面里面是显示#号串的, ≥两次的时候#号串消失,读的是缓存文件):

     

    OK,一个简单的缓存就搞定了。 同学们是不是觉得有哪里不妥?  

    没错,这样是不行滴。你不可能把一个页面永远的缓存下来。那我们现在就来给他优化一下,比如说加个缓存时间,也就是说多长时间之后再去重新读内存。

    方法:我们先设一个5秒的时间变量,然后在判断语句里加上(取缓存文件的上次修改时间小于当前时间),那么在这5秒内除了第一次是读的内存,其他都是读的缓存文件,在5秒

    后又会重新读取一次内存,以此类推。

    代码如下:

    <?php
    
    $filename = "../cache/testhuancun.html";
    
    $time = 5;        //设置一个5秒的时间变量
    
    if(!file_exists($filename) || filemtime($filename)+$time<time())        //判断文件是否存在
    {
        ob_start();            //开启内存缓存
            
        include("../init.inc.php");
        include("../fengzhuang.class.php");
        
        $db = new fengzhuang();
        
        $sql = "select * from rules";
        $attr = $db->query($sql);
        
        $smarty->assign("rules",$attr);
        $smarty->display("test.html");
        
        //把内存里面的内容全部读出来,交给一个变量nr,现在nr里面就存了读取的内容了
        $nr = ob_get_contents();
        //将读到的内容存放到缓存文件
        file_put_contents($filename,$nr);
        
        ob_flush();            //清楚内存缓存
        
        //为了更好的识别此页面是否是缓存页面,我们输出一串#进行辨别
        echo "#########################################################";
    }
    else
    {
        include($filename);
    }

    OK,一个简单而又不庸俗的缓存小程序到此就完事了。^_^

  • 相关阅读:
    Python 自学笔记(二)
    Python 自学笔记(一)
    java.net.MalformedURLException: unknown protocol: 异常
    选择排序精简理解
    JAVA基于File的基本的增删改查
    Oracle常用操作表结构的语句
    jQuery
    基于jquery的ajax方法封装
    javascript运算符——条件、逗号、赋值、()和void运算符 (转载)
    javascript 闭包
  • 原文地址:https://www.cnblogs.com/u1020641/p/6197477.html
Copyright © 2020-2023  润新知