搜尋
首頁php教程php手册PHP缓存原理及使用方法

PHP由于它的强大和可伸缩性,近几年来得到长足的发展,PHP相比传统的ASP网站,在速度上有绝对的 优势,想mssql转6万条数据PHP如需要40秒,ASP不下2分钟.但是,由于网站的数据越来越多,我们渴求能更快速的调用数据,不必要每次都从数据 库掉,我们可以从其他的地方,比方一个文件,或者某个内存地址,这就是PHP的缓存技术,也就是Cache技术。

分析深入
一般来说,缓存的目的是把数据放在一个地方让访问的更快点,毫无疑问,内存是最快的,但是,几百M的数据能往内存放么?这不现实,当然,有的时 候临时放如服务器缓存,如ob_start()这个缓存页面开启的话在发送文件头之前页面内容都被缓存在内存中,知道等页面输出自动清楚或者等待 ob_get_contents的返回,或者被ob_end_clean显示的清除,这在静态页面的生成中能很好的利用,在模板中能得到很好的体现。
另外,在ASP中有一对象application,可以保存公用的参数,这也算点缓存,但在PHP,我至今没看到开发者产出这种对象,的确,没 必要.ASP.NET的页面缓存技术就用的是viewstate,而cache就是文件关联,(不一定准确),文件被修改,更新缓存,文件没被修改而且不 超时(注释1),就读取缓存,返回结果,就是这个思路,看看这个源码:

<ol class="dp-c">
<li class="alt"><span><span><?PHP     </span></span></span></li>
<li><span>    <span class="keyword">class</span><span> cache{     </span></span></li>
<li class="alt"><span>    <span class="keyword">private</span><span> </span><span class="vars">$cache_dir</span><span>;     </span></span></li>
<li><span>    <span class="keyword">private</span><span> </span><span class="vars">$expireTime</span><span>=180;</span><span class="comment">//缓存的时间是 60 秒    </span><span> </span></span></li>
<li class="alt"><span>    <span class="keyword">function</span><span> __construct(</span><span class="vars">$cache_dirname</span><span>){     </span></span></li>
<li><span>     <span class="keyword">if</span><span>(!@</span><span class="func">is_dir</span><span>(</span><span class="vars">$cache_dirname</span><span>)){     </span></span></li>
<li class="alt"><span>      <span class="keyword">if</span><span>(!@</span><span class="func">mkdir</span><span>(</span><span class="vars">$cache_dirname</span><span>,0777)){     </span></span></li>
<li><span>      <span class="vars">$this</span><span>->warn(</span><span class="string">'缓存文件不存在而且不能创建,需要手动创建.'</span><span>);     </span></span></li>
<li class="alt"><span>      <span class="keyword">return</span><span> false;     </span></span></li>
<li><span>      }     </span></li>
<li class="alt"><span>     }     </span></li>
<li><span>    <span class="vars">$this</span><span>->cache_dir = </span><span class="vars">$cache_dirname</span><span>;     </span></span></li>
<li class="alt"><span>    }     </span></li>
<li><span>    <span class="keyword">function</span><span> __destruct(){     </span></span></li>
<li class="alt"><span>     <span class="func">echo</span><span> </span><span class="string">'Cache class bye.'</span><span>;     </span></span></li>
<li><span>    }     </span></li>
<li class="alt"><span>        </span></li>
<li><span>    <span class="keyword">function</span><span> get_url() {     </span></span></li>
<li class="alt"><span>            <span class="keyword">if</span><span> (!isset(</span><span class="vars">$_SERVER</span><span>[</span><span class="string">'REQUEST_URI'</span><span>])) {     </span></span></li>
<li><span>                    <span class="vars">$url</span><span> = </span><span class="vars">$_SERVER</span><span>[</span><span class="string">'REQUEST_URI'</span><span>];     </span></span></li>
<li class="alt"><span>            }<span class="keyword">else</span><span>{     </span></span></li>
<li><span>                    <span class="vars">$url</span><span> = </span><span class="vars">$_SERVER</span><span>[</span><span class="string">'SCRIPT_NAME'</span><span>];     </span></span></li>
<li class="alt"><span>                    <span class="vars">$url</span><span> .= (!emptyempty(</span><span class="vars">$_SERVER</span><span>[</span><span class="string">'QUERY_STRING'</span><span>])) ? </span><span class="string">'?'</span><span> . </span><span class="vars">$_SERVER</span><span>[</span><span class="string">'QUERY_STRING'</span><span>] : </span><span class="string">''</span><span>;     </span></span></li>
<li><span>            }     </span></li>
<li class="alt"><span>        </span></li>
<li><span>            <span class="keyword">return</span><span> </span><span class="vars">$url</span><span>;     </span></span></li>
<li class="alt"><span>    }    </span></li>
<li><span>    <span class="keyword">function</span><span> warn(</span><span class="vars">$errorstring</span><span>){   </span></span></li>
<li class="alt"><span>    <span class="func">echo</span><span> </span><span class="string">"<b><font>发生错误:<pre class="brush:php;toolbar:false">"
.$errorstring." ";   
  •     }   
  •       
  •     function cache_page($pageurl,$pagedata){   
  •      if(!$fso=fopen($pageurl,'w')){   
  •       $this->warns('无法打开缓存文件.');//trigger_error   
  •       return false;   
  •      }   
  •      if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定   
  •       $this->warns('无法锁定缓存文件.');//trigger_error   
  •       return false;   
  •      }   
  •      if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式   
  •       $this->warns('无法写入缓存文件.');//trigger_error   
  •       return false;   
  •      }   
  •      flock($fso,LOCK_UN);//释放锁定   
  •      fclose($fso);   
  •      return true;   
  •     }   
  •       
  •     function display_cache($cacheFile){   
  •                 if(!file_exists($cacheFile)){   
  •         $this->warn('无法读取缓存文件.');//trigger_error   
  •         return false;   
  •                 }   
  •        echo '读取缓存文件:'.$cacheFile;   
  •     //return unserialize(file_get_contents($cacheFile));   
  •             $fso = fopen($cacheFile'r');   
  •             $data = fread($fsofilesize($cacheFile));   
  •             fclose($fso);   
  •      return $data;   
  •     }   
  •       
  •     function readData($cacheFile='default_cache.txt'){   
  •      $cacheFile = $this->cache_dir."/".$cacheFile;   
  •      if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){   
  •       $data=$this->display_cache($cacheFile);   
  •       }else{   
  •        $data="from here wo can get it from mysql database,update time is ".date('l dS \of F Y h:i:s A').",过期时间是:".date('l dS \of F Y h:i:s A',time()+$this->expireTime)."----------";   
  •        $this->cache_page($cacheFile,$data);   
  •      }   
  •       return $data;   
  •     }   
  •     }   
  •     ?>  


  • 陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25:如何解鎖Myrise中的所有內容
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

    WebStorm Mac版

    WebStorm Mac版

    好用的JavaScript開發工具

    SecLists

    SecLists

    SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。