建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网站开发 > PHP教程 >

PHP 中的数据库缓存原理

时间:2009-03-27 23:46来源: 作者: 点击:
如果后台应用接收到浏览器端的查询请求后,每次都与数据库连接读取数据,势必增加数据库的负担。而往往有大量的请求是重复的,我们可以把这些重复的信息采用缓存技术保存下来,重复使用,这样,在某些情况下可以大大提高程序的性能。

如果后台应用接收到浏览器端的查询请求后,每次都与数据库连接读取数据,势必增加数据库的负担。而往往有大量的请求是重复的,我们可以把这些重复的信息采用缓存技术保存下来,重复使用,这样,在某些情况下可以大大提高程序的性能。


   1,缓存函数
   cache_write函数接受$string参数,写到$file文件中。注意var_export函数,作用是:
   此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
   这些参数可以是数组或常量,而这些数组或常量通常为从数据库中取出的记录,或非序列化(unserialize)对象后得到的数据。这些都可以缓存到本地的文本文件中。
   cache_write函数很简单,需要读取数据时,先判断缓存是否存在,存在的话就不去连接数据库取数据,而是直接读出缓存的文本文件,直接产生了数组或常量等类型的数据,可以直接使用。
   <?php
   //文件名func.inc.php
   define("CACHEDIR", "./");   //定义缓存文件夹
   function cache_write($file, $string, $type = 'array'){
     if(is_array($string)){
        $type = strtolower($type);
          if($type == 'array'){
              $string = "<?php\n return ".var_export($string,TRUE).";\n?>";
        }elseif($type == 'constant'){
              $data='';
                foreach($string as $key => $value)
                      $data .= "define('".strtoupper($key)."','".addslashes($value)."');\n";
                      $string = "<?php\n".$data."\n?>";
       }
}
$strlen = file_put_contents(CACHEDIR.$file, $string);
chmod(CACHEDIR.$file, 0777);
return $strlen;
   }
   function cache_read($file) {
         $cachefile = CACHEDIR.$file;
          if(!file_exists($cachefile))
                 return array();
                 return include $cachefile;
   }
   function cache_delete($file)
   {
         return @unlink(CACHEDIR.$file);
   }
   if(!function_exists('file_put_contents'))
   {
            define('FILE_APPEND', 8);
    function file_put_contents($file, $string, $append = ''){
      $mode = $append == '' ? 'wb' : 'ab';
       $fp = @fopen($file, $mode) or exit("Can not open file $file !");
       flock($fp, LOCK_EX);
        $stringlen = @fwrite($fp, $string);
       flock($fp, LOCK_UN);
        @fclose($fp);
         return $stringlen;
       }
   }
   ?>

   2,写缓存和读取的示例
     <?php
       //写缓存
        include "func.inc.php";
     
        $arr = array (1, 2, array ("a", "b", "c"));
        cache_write('test.cache.php', $arr);   //缓存文件 test.cache.php
   ?>
     <?php
       //读缓存
        include "func.inc.php";
     
        $var = cache_read('test.cache.php');
        print_r($new_var);
     
        print_r($var);
     
        foreach ($var as $k=>$v){
             echo '<br>' . $k . '=' . $v ;
        }
       ?>

3,性能分析

缓存之所以能提高性能,是通过本地磁盘空间网络存取速度和数据库服务器存取时间的结果。
a = 本机读写时间
b = 本机占用空间
c = 网络传输时间
d = 数据库服务器磁盘时间
可以估算到,如果数据库与应用程序存在于一台机器时,主要是 a 与 d 的比较,效果可能并不明显,甚至还要糟一点。因为数据库系统针对磁盘存取经过了精心优化,是操作系统对文件的普通读写无法相比的。
如果本机的磁盘存取效率不佳,有时从局域网的数据库上取得数据,可能比从本机的缓存取数据还快,这种情况比较少见。而随着请求数量的大量增加,缓存的效果就会明显起来。

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片