導航:首頁 > 編程語言 > php緩存操作

php緩存操作

發布時間:2024-12-24 19:35:22

php緩存技術的PHP緩存類型

1、資料庫數據緩存技術:
數據緩存:這里所說的數據緩存是指資料庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接資料庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。和memcache技術。
舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個欄位中,需要的時候數組分解一下,這樣的好處是只讀一個表,壞處就是兩個數據同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
常用的資料庫數據緩存技術有:
1.序列化(串列化)緩存
2.JSON緩存
3.XML緩存
4.Array緩存
2、頁面緩存:
每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接資料庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些PHP緩存機制類通常有此功能,例如smarty模板、thinkphp框架)

⑵ PHP應用中常用的9大緩存技術

一、全頁面靜態化緩存



也就是將頁面全部生成html靜態頁面,用戶訪問時直接訪問的靜態頁面,而不會去走php伺服器解析的流程。此種方式,在CMS系統中比較常見,比如dedecms;


一種比較常用的實現方式是用輸出緩存:


Ob_start()******要運行的代碼*******$content=Ob_get_contents();****將緩存內容寫入html文件*****Ob_end_clean();


二、數據緩存


顧名思義,就是緩存數據的一種方式;比如,商城中的某個商品信息,當用商品id去請求時,就會得出包括店鋪信息、商品信息等數據,此時就可以將這些數據緩存到一個php文件中,文件名包含商品id來建一個唯一標示;下一次有人想查看這個商品時,首先就直接調這個文件裡面的信息,而不用再去資料庫查詢;其實緩存文件中緩存的就是一個php數組之類;


Ecmall商城系統裡面就用了這種方式;




三、查詢緩存


其實這跟數據緩存是一個思路,就是根據查詢語句來緩存;將查詢得到的數據緩存在一個文件中,下次遇到相同的查詢時,就直接先從這個文件裡面調數據,不會再去查資料庫;但此處的緩存文件名可能就需要以查詢語句為基點來建立唯一標示;


按時間變更進行緩存


就是對於緩存文件您需要設一個有效時間,在這個有效時間內,相同的訪問才會先取緩存文件的內容,但是超過設定的緩存時間,就需要重新從資料庫中獲取數據,並生產最新的緩存文件;比如,我將我們商城的首頁就是設置2個小時更新一次。


四、頁面部分緩存


該種方式,是將一個頁面中不經常變的部分進行靜態緩存,而經常變化的塊不緩存,最後組裝在一起顯示;可以使用類似於ob_get_contents的方式實現,也可以利用類似ESI之類的頁面片段緩存策略,使其用來做動態頁面中相對靜態的片段部分的緩存。


該種方式可以用於如商城中的商品頁;


五、Opcode緩存


首先php代碼被解析為Tokens,然後再編譯為Opcode碼,最後執行Opcode碼,返回結果;所以,對於相同的php文件,第一次運行時可以緩存其Opcode碼,下次再執行這個頁面時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了。


比較知名的是XCache、TurckMMCache、PHPAccelerator等。


六、按內容變更進行緩存


這個也並非獨立的緩存技術,需結合著用;就是當資料庫內容被修改時,即刻更新緩存文件;


比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面緩存;


當商家在後台修改這個商品的信息時,點擊保存,我們同時就更新緩存文件;那麼,買家訪問這個商品信息時,實際問的是一個靜態頁面,而不需要再去訪問資料庫;


試想,如果對商品頁不緩存,那麼每次訪問一個商品就要去資料庫查一次,如果有10萬人在線瀏覽商品,那伺服器壓力就大了;


七、內存式緩存


提到這個,可能大家想到的首先就是Memcached;memcached是高性能的分布式內存緩存伺服器。一般的使用目的是,通過緩存資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴展性。


它就是將需要緩存的信息,緩存到系統內存中,需要獲取信息時,直接到內存中取;比較常用的方式就是key_>value方式;


connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache->set('key','緩存的內容');$get=$memcache->get($key);//獲取信息?>


八、apache緩存模塊


apache安裝完以後,是不允許被cache的。雲南IT培訓http://www.kmbdqn.cn/認為如果外接了cache或squid伺服器要求進行web加速的話,就需要在htttpd.conf里進行設置,當然前提是在安裝apache的時候要激活mod_cache的模塊。


⑶ thinkphp 數據緩存是否校驗緩存是什麼意思

在ThinkPHP中進行緩存操作,一般情況下並不需要直接操作緩存類,因為系統內置對緩存操作進行了封裝,直接採用S方法即可,例如:

// 緩存初始化

S(array('type'=>'xcache','expire'=>60));

緩存初始化可以支持的參數根據不同的緩存方式有所區別,常用的參數是:

參數 描述

expire 緩存有效期(時間為秒)

prefix 緩存標識前綴

type 緩存類型

系統目前已經支持的緩存類型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache。

如果S方法不傳入type參數初始化的話,則讀取配置文件中設置的DATA_CACHE_TYPE參數值作為默認類型。同樣的道理,prefix參數如果沒有傳入會讀取配置文件的DATA_CACHE_PREFIX參數值,expire參數沒有傳入則讀取DATA_CACHE_TIME配置值作為默認。

有些緩存方式會有一些自身特殊的參數,例如Memcache緩存,還需要配置其他的參數:

S(array(

'type'=>'memcache',

'host'=>'192.168.1.10',

'port'=>'11211',

'prefix'=>'think',

'expire'=>60)

);

對於全局的緩存方式,一般我們建議添加prefix(緩存前綴)參數用以區分不同的應用,以免混淆。

// 設置緩存

S('name',$value);

會按照緩存初始化時候的參數進行緩存數據,也可以在緩存設置的時候改變參數,例如:

// 緩存數據300秒

S('name',$value,300);

甚至改變之前的緩存方式或者更多的參數:

// 採用文件方式緩存數據300秒

S('name',$value,array('type'=>'file','expire'=>300));

如果你在緩存設置的時候採用上面的數組方式傳入參數的話,會影響到後面的緩存存取。

緩存讀取

// 讀取緩存

$value = S('name');

緩存讀取的是前面緩存設置的值,這個值會受緩存初始化或者緩存設置的時候傳入的參數影響。 如果緩存標識不存在或者已經過期,則返回false,否則返回緩存值。

// 刪除緩存

S('name',null);

刪除緩存標識為name的緩存數據。

對象方式操作緩存

我們可以採用對象方式操作緩存,例如:

// 初始化緩存

$cache = S(array('type'=>'xcache','prefix'=>'think','expire'=>600));

$cache->name = 'value'; // 設置緩存

$value = $cache->name; // 獲取緩存

unset($cache->name); // 刪除緩存

如果你設置了緩存前綴的話,對應的緩存操作只是對應該緩存前綴標識的,不會影響其他的緩存。

關於文件緩存方式的安全機制

如果你使用的是文件方式的緩存機制,那麼可以設置DATA_CACHE_KEY參數,避免緩存文件名被猜測到,例如:

'DATA_CACHE_KEY'=>'think'

數據緩存可以支持緩存隊列,簡單的說就是可以限制緩存的數量,只需要在初始化的時候指定length參數:

S(array('type'=>'xcache','length'=>100,'expire'=>60));

設置了length參數後,系統只會緩存最近的100條緩存數據。

⑷ 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緩存技術有那些 靜太化設計是不是指re

PHP緩存與靜態化知識:
緩存原理:緩存工作時程序查詢數據時候,會把相應的結果序列化後保存到文件中,以後同樣查詢語句就可以不用直接查詢資料庫而是從緩存文件中獲得。使得程序運行速度得以大幅度提升。
按緩存模式分有:頁面緩存、數據緩存。ADODB緩存是數據緩存、smarty是頁面緩存(Adodb+Smarty黃金搭檔)。
按緩存技術分有:普遍緩存技術數據緩存、頁面緩存、時間觸發緩存、內容觸發緩存(當插入數據或更新數據時,強制更新緩存)靜態緩存、DNS輪詢(BIND是一款開放源碼的DNS伺服器軟體);
內存緩存(減少資料庫負載,提升訪問速度)、php的緩沖器、MYSQL緩存、基於反向代理的Web緩存(如Nginx,SQUID,mod_proxy(apache2以上又分為mod_proxy和mod_cache))。
按緩存類型分有:緩存模塊(Zend Cache、APC等)、HTML方式(CMS)、生成Cache文件、php內置緩存機制(Discuz)、緩存IE下載的文件
判斷緩存是否改變:緩存文件時間超過了就會自動讀取新的,不然就讀取緩存文件。也可以在更新數據的同時用clear_cache函數清除你原來的緩存。
偽靜態就是mod_rewrite,還有pathinfo方式、真靜態就是利用緩沖機制,生成文件。
數據緩存,基本是memcache、代碼緩存,基本是apc。
緩存模塊實例:
APC:
全稱是Alternative PHP Cache,官方翻譯叫」可選PHP緩存」,但我個人覺得應該叫」另一個PHP緩存」。因為這個東西如果叫」可選PHP緩存」,容易給人一種可要可不要的,不怎麼有用的錯覺。
PHP APC的安裝: 一般是下載源代碼然後phpize來編譯安裝,安裝完以後在加上php.ini里加上 extension=apc.so 這么一行就行了。
PHP APC的使用: APC的使用其實倒說不上.APC是個優化器,自安裝之日起,就默默地在後台為您的PHP應用服務了.您的所有PHP代碼會被緩存起來. 另外,APC可提供一定的內存緩存功能.但是這個功能並不是十分完美,有報告說如果頻繁使用APC緩存的寫入功能,會導致不可預料的錯誤.如果想使用這個 功能,可以看看apc_fetch,apc_store等幾個與apc緩存相關的函數. 從PHP5.2開始,APC引入了一個小甜餅,解決了困擾大家已久的大文件上傳的進度條問題。
PHP APC的高級使用,緩存期限: APC的緩存分兩部分:系統緩存和用戶數據緩存。

⑹ php 緩存方式有哪幾種呢 都在什麼情況下使用呢

PHP緩存技術 WEB程序獲取信息的方式主要是查詢資料庫,當資料庫不是很大的情況下不會有太大的問題.然而,隨著網站的發展,資料庫呈幾何級數的方式增長的時候,就會出現瓶頸.於是PHP緩存技術誕生了.PHP緩存技術工作時,當程序查詢數據的時候,會把相應的結果序列化後保存到文件中,以後同樣的查詢語句就可以不用直接查詢資料庫,而是從緩存文件中獲得。這一改進使得程序運行速度得以太幅度提升.
目前應用PHP緩存技術比較流行的方法主要是Adodb+Smarty這樣的黃金搭檔.
PHP緩存技術工作原理:
首先看看adodb提供的數據緩存功能:
1<?php
2include('adodb.inc.php'); # load code common to ADOdb
3$ADODB_CACHE_DIR = '/usr/ADODB_cache';
4$conn = &ADONewConnection('mysql'); # create a connection
5$conn->PConnect(' ','userid','','agora');# connect to MySQL, agora db
6$sql = 'select CustomerName, CustomerID from customers';
7$rs = $conn->CacheExecute(15,$sql);
8?> 如上,每次查詢數據的時候,會把相應的結果序列化後保存到文件中,以後同樣的查詢語句就可以不用直接查詢資料庫,而是從緩存文件中獲得。
再來看看Smarty提供的頁面緩存功能:
1<?php
2require('Smarty.class.php');
3$smarty = new Smarty;
4$smarty->caching = true;
5if(!$smarty->is_cached('index.tpl')) {
6 // No cache available, do variable assignments here.
7 $contents = get_database_contents();
8 $smarty->assign($contents);
9}
10$smarty->display('index.tpl');
11?>
12
如上,每次訪問頁面的時候,都會先檢測相應的緩存是否存在,如果不存在,就連接資料庫,得到數據,完成模板變數的賦值,顯示頁面,同時生成緩存文件,這樣下次訪問的時候緩存文件就發揮作用了,而不會再執行if塊的數據查詢語句了。當然,在實際使用中會有很多東西要考慮,比如,有效期的設置,緩存組的設置等等,具體可以查看Smarty手冊中有關緩存(caching)的相關章節。
以上兩個PHP流行組件緩存方式的側重點是不同的,對於Adodb的緩存而言,它緩存的是數據,對於Smarty的緩存而言,它緩存的是頁面。其他提供緩存功能的組件還有很多(如:PEAR::Cache_Lite等等),實際編程中使用哪個方案要具體情況具體分析,也可能會綜合使用。
使用這些組件內置的緩存方案有一個很明顯的好處是它們的實現對客戶端而言都很透明。只要進行必要的設置(如:緩存時間,緩存目錄等等)就可以了,而不用過多考慮實現緩存的細節問題,系統會根據設置自動管理緩存。但是其缺點也同樣明顯,因為每次請求仍然要用PHP解析一遍,效率和純靜態相比還是大打折扣,在大的PV面前還是不能滿足要求,在這種情況下,僅僅做動態緩存就不夠了,必須實現靜態緩存。
PHP,一門最近幾年興起的web設計腳本語言,由於它的強大和可伸縮性,近幾年來得到長足的發展,php相比傳統的asp網站,在速度上有絕對的優勢,想mssql轉6萬條數據php如需要40秒,asp不下2分鍾.但是,由於網站的數據越來越多,我們渴求能更快速的調用數據,不必要每次都從資料庫掉,我們可以從其他的地方,比方一個文件,或者某個內存地址,這就是php的緩存技術,也就是Cache技術.

⑺ PHP緩存技術的PHP編譯緩存

目前最常見的PHP編譯緩存工具有:APC,Accelerator,xcache(國產)等。
PHP是一種解釋型語言,在PHP語言執行代碼的時候,需要下面兩步:
1、編譯過程。PHP讀取文件,並編譯該文件,然後生成能夠在Zend Engine虛擬機上執行的中間碼。
2、執行過程。PHP直接執行中間碼。
以下兩種情況,會導致PHP運行程序代碼效率低下:
1、即使PHP代碼文件沒有發生改變,也會被PHP重新編譯。
2、如有引用文件,PHP也要花費時間重新編譯這些被引用的文件。
因此,需要PHP編譯緩存工具對PHP程序的編譯結果做緩存處理。這樣,PHP程序只要編譯一次,就不要重新再做無意義的編譯了。

閱讀全文

與php緩存操作相關的資料

熱點內容
女程序員美劇 瀏覽:637
安卓怎麼隱身登錄王者榮耀 瀏覽:852
通達信前五源碼編寫 瀏覽:15
gcc怎麼編譯qt程序 瀏覽:925
華為文件夾命名大全 瀏覽:383
php無限分類循環 瀏覽:41
北漂程序員營養餐 瀏覽:105
掃描件pdf轉換成圖片 瀏覽:58
忍者必須死伺服器升級到什麼時候 瀏覽:339
鹼基最多配對演算法 瀏覽:829
命令和決定表彰上的區別 瀏覽:152
全國醫保服務平台app叫什麼 瀏覽:319
php輸出表單 瀏覽:237
西門子r變數編程入門 瀏覽:374
壓縮機器人怎麼做 瀏覽:285
魔獸懷舊服什麼時候來新伺服器 瀏覽:796
如何電腦網路加密 瀏覽:475
終端世界在編譯 瀏覽:771
白色洗碗棉手工解壓 瀏覽:748
JDM什麼app 瀏覽:512