php怎麼做緩存
因為資料庫用的是Postgresql,並發承受非常弱,於是採取了大量緩存策略。已經實現的有:在模型層基類利用memcache緩存PDO獲取的關聯數組,下次訪問就直接從memcached讀取,直到數據更新(也由該模型類承擔)時候更新的方法摧毀緩存。對於頁面級別緩存,自己寫了一些實現,主要利用php的文件操作函數將頁面存為靜態,下次讀取到緩存的時候就終止控制器執行action,直接返回緩存結果。部署在ubuntu 10.10、nginx+fastcgi(php-fpm)+php5.3+apc+memcached、pgsql 9上用Apache ab壓力測試,結果第二種方法從硬碟獲取緩存的居然比第一種從內存獲取緩存的要好,分析原因應該是因為第二種終止了控制器動作。看來Zend Framework的開銷真的很大。因為有獨立伺服器不用寄居學校虛擬主機,所以計劃繼續刪減Zend……現在新的問題來了,在網站中更常用的應該是頁面片段緩存,可是真的從未聽說什麼PHP頁面片段緩存的方案。谷歌了一下,都是說Yii Framework的片段緩存的。現在我想自己實現片段緩存,可是很沒有思路。以上第二種方法在片段緩存問題上行不通,因為內容沒有輸出完全不能終止控制器執行(比較笨,我用在整頁緩存中是命中緩存後exit()暴力退出的)。而不終止控制器第二種方案基本就沒有性能優勢。而且因為視圖引擎是Blitz,沒有自帶緩存方案,自定義片段緩存不能依賴視圖層。之前.net了一年,現在換屆了想和團隊往開源方向走,可是PHP的一些具體解決方案實在了解甚少。不知大家可否提供一些思路呢?謝謝大家啦~
⑵ 關於php做緩存的原理
差不多吧,但是你把存放在模板中的文件刪除後,會慢很多,因為它要重新生成,那是很慢的,後面再訪問的時候就快多了
⑶ php 緩存怎麼寫
PHP數據緩存常用頁面緩存 靜態緩存
php頁面緩存主要用到的是ob系列函數,如ob_start(),ob_end_flush(),ob_get_contents()
靜態緩存是指靜態化,直接生成HTML或XML等文本文件,有更新的時候重生成一次,適合於不太變化的頁面
給你個頁面緩存的例子
function page_cache($ttl = 0)
{
$ttl = $ttl ? $ttl : PAGE_TTL;//緩存時間,默認3600s
$contents = ob_get_contents();//從緩存中獲取內容
$contents = "<!--page_ttl:".(time() + $ttl)."-->n".$contents;
//加上自定義頭部:過期時間=生成時間+緩存時間
file_put_contents(PAGE_FILE, $contents);//寫入緩存文件中
ob_end_flush();//釋放緩存
}
⑷ php怎麼使用緩存
假設要訪問add_friend.php,先查看緩存目錄下(假設為cache文件夾)下有沒有與add_friend.php對應的緩存文件(文件類型一般為php),若無則重新生成,若有,且緩存時間沒有過期則直接調用該緩存文件既可以,如果過期則重新生成
生成緩存文件則主要是採用正則替換的方式
⑸ PHP緩存怎麼弄的
樓上已經說對了,php下緩存都寫進文件,用的是ob_start函數系列(自己網路下),用的時候包含即可。給你個例子————
<?php
//這里寫段代碼,判斷緩存是否存在,其實就是判斷a.html文件存不存在
//如果緩存存在,直接include 包含即可,然後用 exit 退出
//否則執行下面代碼
ob_start();//緩存開始
echo 'hello,world!';
$content = ob_get_clean();//獲取緩存內容,然後清空緩存
$fp = fopen('a.html', 'w');
//然後fput函數寫入$content的內容到文件,你應該懂的
~~~~~~~不懂追問哦,很高興能幫助你~~
⑹ PHP緩存技術的PHP編譯緩存
目前最常見的PHP編譯緩存工具有:APC,Accelerator,xcache(國產)等。
PHP是一種解釋型語言,在PHP語言執行代碼的時候,需要下面兩步:
1、編譯過程。PHP讀取文件,並編譯該文件,然後生成能夠在Zend Engine虛擬機上執行的中間碼。
2、執行過程。PHP直接執行中間碼。
以下兩種情況,會導致PHP運行程序代碼效率低下:
1、即使PHP代碼文件沒有發生改變,也會被PHP重新編譯。
2、如有引用文件,PHP也要花費時間重新編譯這些被引用的文件。
因此,需要PHP編譯緩存工具對PHP程序的編譯結果做緩存處理。這樣,PHP程序只要編譯一次,就不要重新再做無意義的編譯了。
⑺ 在PHP中怎麼對數據進行緩存讀取功能
1、普遍緩存技術:
數據緩存:這里所說的數據緩存是指資料庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接資料庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。
舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個欄位中,需要的時候數組分解一下,這樣的好處是只讀一個表,壞處就是兩個數據同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
2、 頁面緩存:
每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接資料庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些PHP緩存機制類通常有此功能)
3、 時間觸發緩存:
檢查文件是否存在並且時間戳小於設置的過期時間,如果文件修改的時間戳比當前時間戳減去過期時間戳大,那麼就用緩存,否則更新緩存。
4、 內容觸發緩存:
當插入數據或更新數據時,強制更新PHP緩存機制。
5、 靜態緩存:
這里所說的靜態緩存是指靜態化,直接生成HTML或XML等文本文件,有更新的時候重生成一次,適合於不太變化的頁面,這就不說了。
以上內容是代碼級的解決方案,我直接CP別的框架,也懶得改,內容都差不多,很容易就做到,而且會幾種方式一起用,但下面的內容是伺服器端的緩存方案,非代碼級的,要有多方的合作才能做到
6、 內存緩存:
Memcached是高性能的,分布式的內存對象PHP緩存機制系統,用於在動態應用中減少資料庫負載,提升訪問速度。
7、 php的緩沖器:
有eaccelerator, apc, phpa,xcache,這個這個就不說了吧,搜索一堆一堆的,自己看啦,知道有這玩意就OK
8、 MYSQL緩存:
這也算非代碼級的,經典的資料庫就是用的這種方式,看下面的運行時間,0.09xxx之類的
9、 基於反向代理的Web緩存:
如Nginx,SQUID,mod_proxy(apache2以上又分為mod_proxy和mod_cache)
⑻ PHP項目緩存怎麼搭建
你可以用redis或者memcache來做db緩存,他們的原理就是像你說的如果存在則從緩存中取,如果不存在則讀取資料庫並設置緩存。memcache和redis的區別是memcache只支持用內存做緩存,redis支持內存或者文件作為緩存,這要根據你的內存大小做選擇。
另外在你請出緩存的時候,前端程序里其實應該或有是否緩存存在的判斷,如果剛好用戶訪問的時候緩存被清除,則應該會讀取資料庫,不會出現錯誤。
請採納。
⑼ php 緩存如何設計
ob_get_contents, ob_end_clean從實現上應該是ob_get_clean的分解步驟。後者因為從c代碼層面的整合,在僅單次執行時,速度上應該有微量的優勢。因為優勢遠比網路IO的延遲要小,幾乎可以忽略吧。
echo ob_get_contents應該也一般是用於首次生成模板緩存。是內存操作。
include用於直接顯示。是文件操作。
顯示模板可以用後者,做緩存所節約的時間主要是處理計算和各媒介之間的IO上的,根據自己的應用和自己的設備環境在慢的、瓶頸部分作出調整,是靈活的。沒有定式。
⑽ php 中如何使用緩存,使用哪種緩存機制最好;
php的緩存三種.有文件緩存,資料庫緩存,memcache緩存;
memcache緩存要求對伺服器支持,而且它的緩存是由期限的,一般是30天。這種緩存的效率是最高的。讀存取的速度最快。
資料庫緩存
和
文件緩存比較簡單。適用小的項目。和php新手