程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP 中的數據庫緩存原理

PHP 中的數據庫緩存原理

編輯:PHP綜合

如果後台應用接收到浏覽器端的查詢請求後,每次都與數據庫連接讀取數據,勢必增加數據庫的負擔。而往往有大量的請求是重復的,我們可以把這些重復的信息采用緩存技術保存下來,重復使用,這樣,在某些情況下可以大大提高程序的性能。


   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 的比較,效果可能並不明顯,甚至還要糟一點。因為數據庫系統針對磁盤存取經過了精心優化,是操作系統對文件的普通讀寫無法相比的。
如果本機的磁盤存取效率不佳,有時從局域網的數據庫上取得數據,可能比從本機的緩存取數據還快,這種情況比較少見。而隨著請求數量的大量增加,緩存的效果就會明顯起來。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved