『壹』 thinkphp怎麼寫更新緩存功能
使用緩存的場景大概是符合這一點:數據改變的頻率不快。也就是說:一個數據,如果好幾個小時,甚至好幾天都不發生改變,那麼就可以使用緩存。 使用緩存的模式是這樣: if(緩存不存在) { 從資料庫中取出數據,存入緩存,然後給緩存設置一個時間 } else { 取出緩存中的數據 } 如果是數據基本上永遠都不變的話,那麼可以使用「頁面靜態化」的技術,「頁面靜態化」比「緩存」更加提高網站訪問的性能。
ThinkPHP在數據緩存方麵包括文件方式、共享內存方式和資料庫方式在內的多種方式進行緩存,通過插件方式還可以增加以後需要的緩存類,讓應用開發可
以選擇更加適合自己的緩存方式,從而有效地提高應用執行效率。目前已經支持的緩存方式包括:File、Apachenote、Apc、
Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache。
為了開發的方便,可以把緩存給去除。
1.找到ThinkPHPCommonconvention.php和ThinkPHPCommondebug.php
2.打開這兩個文件找到你想要的設置即可。
debug.php中
'TMPL_CACHE_ON'=>false, // 默認開啟模板緩存
復制代碼
convention.php中'
TMPL_CACHE_ON' => false, // 默認開啟模板編譯緩存 false 的話每次都重新編譯模板
'ACTION_CACHE_ON' => false, // 默認關閉Action 緩存
'HTML_CACHE_ON' => false, // 默認關閉靜態緩存
復制代碼
thinkphp 怎麼關閉全部緩存?(
APP_DEBUG=>true
DB_FIELD_CACHE=>false
HTML_CACHE_ON=>false
復制代碼
關閉ThinkPHP模板緩存
最後自己找見了,在config.php裡面加上一句
'TMPL_CACHE_ON' => false,
'TMPL_CACHE_ON' => false,
復制代碼
這樣每次運行都重新生成緩存
『貳』 PHP緩存技術的PHP編譯緩存
目前最常見的PHP編譯緩存工具有:APC,Accelerator,xcache(國產)等。
PHP是一種解釋型語言,在PHP語言執行代碼的時候,需要下面兩步:
1、編譯過程。PHP讀取文件,並編譯該文件,然後生成能夠在Zend Engine虛擬機上執行的中間碼。
2、執行過程。PHP直接執行中間碼。
以下兩種情況,會導致PHP運行程序代碼效率低下:
1、即使PHP代碼文件沒有發生改變,也會被PHP重新編譯。
2、如有引用文件,PHP也要花費時間重新編譯這些被引用的文件。
因此,需要PHP編譯緩存工具對PHP程序的編譯結果做緩存處理。這樣,PHP程序只要編譯一次,就不要重新再做無意義的編譯了。
『叄』 PHP緩存技術的介紹
PHP緩存包括PHP編譯緩存和PHP數據緩存兩種。PHP是一種解釋型語言,屬於邊編譯邊運行的那種。這種運行模式的優點是程序修改很方便,但是運行效率卻很低下。PHP編譯緩存針對這種情況做改進處理,使得PHP語言只要運行一次,就可以把程序的編譯結果緩存起來。
『肆』 PHP項目緩存怎麼搭建
你可以用redis或者memcache來做db緩存,他們的原理就是像你說的如果存在則從緩存中取,如果不存在則讀取資料庫並設置緩存。memcache和redis的區別是memcache只支持用內存做緩存,redis支持內存或者文件作為緩存,這要根據你的內存大小做選擇。
另外在你請出緩存的時候,前端程序里其實應該或有是否緩存存在的判斷,如果剛好用戶訪問的時候緩存被清除,則應該會讀取資料庫,不會出現錯誤。
請採納。
『伍』 php不使用第三方工具,如何設計緩存
結論:可自行設計,或使用內置APCu緩存。
常用的第三方緩存工具,一般是指redis,memcached,以及雲服務商提供的緩存服務。基本不脫離此二類范圍。
用法非常直觀,我們不做深入的介紹了。可在官方手冊內查看。
本文簡要說明了PHP內緩存數據可能使用的方法。我們推薦使用成熟的類庫或擴展,不要重復造輪子。
『陸』 php文件緩存類匯總
本文實例講述了php的文件緩存類。分享給大家供大家參考。具體分析如下:
緩存類是我們開發應用中會常用使用到的功能,下面就來給大家整理幾個php文件緩存類了,各個文件緩存類寫法不同,但在性能上會有區別,有興趣測試的朋友可測試一下這些緩存類。
例1
復制代碼
代碼如下:<?php
$fzz
=
new
fzz_cache;
$fzz->kk
=
$_SERVER;
//寫入緩存
//$fzz->set("kk",$_SERVER,10000);
//此方法不與類屬性想沖突,可以用任意緩存名;
print_r($fzz->kk);
//讀取緩存
//print_r($fzz->get("kk"));
//unset($fzz->kk);
//刪除緩存
//$fzz->_unset("kk");
var_mp(isset($fzz->kk));
//判斷緩存是否存在
//$fzz->_isset("kk");
//$fzz->clear();
//清理過期緩存
//$fzz->clear_all();
//清理所有緩存文件
class
fzz_cache{
public
$limit_time
=
20000;
//緩存過期時間
public
$cache_dir
=
"data";
//緩存文件保存目錄
//寫入緩存
function
__set($key
,
$val){
$this->_set($key
,$val);
}
//第三個參數為過期時間
function
_set($key
,$val,$limit_time=null){
$limit_time
=
$limit_time
?
$limit_time
:
$this->limit_time;
$file
=
$this->cache_dir."/".$key.".cache";
$val
=
serialize($val);
@file_put_contents($file,$val)
or
$this->error(__line__,"fail
to
write
in
file");
@chmod($file,0777);
@touch($file,time()+$limit_time)
or
$this->error(__line__,"fail
to
change
time");
}
//讀取緩存
function
__get($key){
return
$this->_get($key);
}
function
_get($key){
$file
=
$this->cache_dir."/".$key.".cache";
if
(@filemtime($file)>=time()){
return
unserialize(file_get_contents($file));
}else{
@unlink($file)
or
$this->error(__line__,"fail
to
unlink");
return
false;
}
}
//刪除緩存文件
function
__unset($key){
return
$this->_unset($key);
}
function
_unset($key){
if
(@unlink($this->cache_dir."/".$key.".cache")){
return
true;
}else{
return
false;
}
}
//檢查緩存是否存在,過期則認為不存在
function
__isset($key){
return
$this->_isset($key);
}
function
_isset($key){
$file
=
$this->cache_dir."/".$key.".cache";
if
(@filemtime($file)>=time()){
return
true;
}else{
@unlink($file)
;
return
false;
}
}
//清除過期緩存文件
function
clear(){
$files
=
scandir($this->cache_dir);
foreach
($files
as
$val){
if
(filemtime($this->cache_dir."/".$val)<time()){
@unlink($this->cache_dir."/".$val);
}
}
}
//清除所有緩存文件
function
clear_all(){
$files
=
scandir($this->cache_dir);
foreach
($files
as
$val){
@unlink($this->cache_dir."/".$val);
}
}
function
error($msg,$debug
=
false)
{
$err
=
new
Exception($msg);
$str
=
"<pre>
<span
style='color:red'>error:</span>
".print_r($err->getTrace(),1)."
</pre>";
if($debug
==
true)
{
file_put_contents(date('Y-m-d
H_i_s').".log",$str);
return
$str;
}else{
die($str);
}
}
}
?>
『柒』 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 緩存方式有哪幾種呢 都在什麼情況下使用呢
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緩存類型
1、資料庫數據緩存技術:
數據緩存:這里所說的數據緩存是指資料庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接資料庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。和memcache技術。
舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個欄位中,需要的時候數組分解一下,這樣的好處是只讀一個表,壞處就是兩個數據同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
常用的資料庫數據緩存技術有:
1.序列化(串列化)緩存
2.JSON緩存
3.XML緩存
4.Array緩存
2、頁面緩存:
每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接資料庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些PHP緩存機制類通常有此功能,例如smarty模板、thinkphp框架)