十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
?php
創(chuàng)新互聯(lián)公司服務項目包括開化網(wǎng)站建設、開化網(wǎng)站制作、開化網(wǎng)頁制作以及開化網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,開化網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到開化省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
/**
* Redis緩存操作
* @author hxm
* @version 1.0
* @since 2015.05.04
*/
class RCache extends Object implements CacheFace
{
private $redis = null; //redis對象
private $sId = 1; //servier服務ID
private $con = null;//鏈接資源
/**
* 初始化Redis
*
* @return Object
*/
public function __construct()
{
if ( !class_exists('Redis') )
{
throw new QException('PHP extension does not exist: Redis');
}
$this-redis = new Redis();
}
/**
* 鏈接memcahce服務
*
* @access private
* @param string $key 關鍵字
* @param string $value 緩存內(nèi)容
* @return array
*/
private function connect( $sid )
{
$file = $this-CacheFile();
require $file;
if(! isset($cache) )
{
throw new QException('緩存配置文件不存在'.$file);
}
$server = $cache[$this-cacheId];
$sid = isset($sid) == 0 ? $this-sId : $sid;//memcache服務選擇
if ( ! $server[$sid])
{
throw new QException('當前操作的緩存服務器配置文件不存在');
}希望能幫到你,我還在后盾網(wǎng)學習呢,有不會的可以問我,一會有空回答你。( ^ω^)
一、全頁面靜態(tài)化緩存
也就是將頁面全部生成html靜態(tài)頁面,用戶訪問時直接訪問的靜態(tài)頁面,而不會去走php服務器解析的流程。此種方式,在CMS系統(tǒng)中比較常見,比如dedecms;
一種比較常用的實現(xiàn)方式是用輸出緩存:
Ob_start()******要運行的代碼*******$content=Ob_get_contents();****將緩存內(nèi)容寫入html文件*****Ob_end_clean();
二、數(shù)據(jù)緩存
顧名思義,就是緩存數(shù)據(jù)的一種方式;比如,商城中的某個商品信息,當用商品id去請求時,就會得出包括店鋪信息、商品信息等數(shù)據(jù),此時就可以將這些數(shù)據(jù)緩存到一個php文件中,文件名包含商品id來建一個唯一標示;下一次有人想查看這個商品時,首先就直接調(diào)這個文件里面的信息,而不用再去數(shù)據(jù)庫查詢;其實緩存文件中緩存的就是一個php數(shù)組之類;
Ecmall商城系統(tǒng)里面就用了這種方式;
三、查詢緩存
其實這跟數(shù)據(jù)緩存是一個思路,就是根據(jù)查詢語句來緩存;將查詢得到的數(shù)據(jù)緩存在一個文件中,下次遇到相同的查詢時,就直接先從這個文件里面調(diào)數(shù)據(jù),不會再去查數(shù)據(jù)庫;但此處的緩存文件名可能就需要以查詢語句為基點來建立唯一標示;
按時間變更進行緩存
就是對于緩存文件您需要設一個有效時間,在這個有效時間內(nèi),相同的訪問才會先取緩存文件的內(nèi)容,但是超過設定的緩存時間,就需要重新從數(shù)據(jù)庫中獲取數(shù)據(jù),并生產(chǎn)最新的緩存文件;比如,我將我們商城的首頁就是設置2個小時更新一次。
四、頁面部分緩存
該種方式,是將一個頁面中不經(jīng)常變的部分進行靜態(tài)緩存,而經(jīng)常變化的塊不緩存,最后組裝在一起顯示;可以使用類似于ob_get_contents的方式實現(xiàn),也可以利用類似ESI之類的頁面片段緩存策略,使其用來做動態(tài)頁面中相對靜態(tài)的片段部分的緩存。
該種方式可以用于如商城中的商品頁;
五、Opcode緩存
首先php代碼被解析為Tokens,然后再編譯為Opcode碼,最后執(zhí)行Opcode碼,返回結果;所以,對于相同的php文件,第一次運行時可以緩存其Opcode碼,下次再執(zhí)行這個頁面時,直接會去找到緩存下的opcode碼,直接執(zhí)行最后一步,而不再需要中間的步驟了。
比較知名的是XCache、TurckMMCache、PHPAccelerator等。
六、按內(nèi)容變更進行緩存
這個也并非獨立的緩存技術,需結合著用;就是當數(shù)據(jù)庫內(nèi)容被修改時,即刻更新緩存文件;
比如,一個人流量很大的商城,商品很多,商品表必然比較大,這表的壓力也比較重;我們就可以對商品顯示頁進行頁面緩存;
當商家在后臺修改這個商品的信息時,點擊保存,我們同時就更新緩存文件;那么,買家訪問這個商品信息時,實際問的是一個靜態(tài)頁面,而不需要再去訪問數(shù)據(jù)庫;
試想,如果對商品頁不緩存,那么每次訪問一個商品就要去數(shù)據(jù)庫查一次,如果有10萬人在線瀏覽商品,那服務器壓力就大了;
七、內(nèi)存式緩存
提到這個,可能大家想到的首先就是Memcached;memcached是高性能的分布式內(nèi)存緩存服務器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web應用的速度、提高可擴展性。
它就是將需要緩存的信息,緩存到系統(tǒng)內(nèi)存中,需要獲取信息時,直接到內(nèi)存中?。槐容^常用的方式就是key_value方式;
connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache-set('key','緩存的內(nèi)容');$get=$memcache-get($key);//獲取信息?
八、apache緩存模塊
apache安裝完以后,是不允許被cache的。大理IT培訓認為如果外接了cache或squid服務器要求進行web加速的話,就需要在htttpd.conf里進行設置,當然前提是在安裝apache的時候要激活mod_cache的模塊。
看你的具體需求是怎樣的了,
eaccelerator.,
xcache
等
還有一種就是文件緩存
這種一般是
用php自己實現(xiàn)的
沒什么可說的一種是對
頁面結果的緩存
應用服務器級別的
軟件如
squid
一種是
內(nèi)存級別的
一般是對
php
頻繁調(diào)用的并且如果每次查詢會消耗大量資源的數(shù)據(jù)
軟件有
memcached
一種是
對php
程序進行優(yōu)化編碼的緩存
如
apache
里面的
apc
樓主,你所說的這個的實現(xiàn)則是
+
根據(jù)文件來判斷的,每個文件在生成的時候都有一個創(chuàng)建時間,
+
而在數(shù)據(jù)庫的設計中,則是存在這一個修改時間,
+
也就是用數(shù)據(jù)庫來存儲和計算這兩個值的差值或者是是否相同,
+
再來判斷是否要重新生成實質(zhì)性的HTML文件..
根據(jù)樓主的描述,大致的解決思路如上..
而有關
ob_start
的理解,則是:
+
ob_start
先將數(shù)據(jù)放入
ob
緩存
+
ob_flush
再將緩存數(shù)據(jù)輸出到程序緩存中
+
ob_end_clean
清空緩存并且關閉緩存
+
程序輸出
而在頁面靜態(tài)化中,緩存的方法有:
+
ob緩存
+
smarty
緩存
+
ThinkPHP
緩存
+
模版緩存
靜態(tài)化又分為:
+
實質(zhì)的靜態(tài)化
+
偽靜態(tài)化
這是本人的理解,樓主可以在此基礎上加強,形成自己的理解..
php的緩存三種.有文件緩存,數(shù)據(jù)庫緩存,memcache緩存;
memcache緩存要求對服務器支持,而且它的緩存是由期限的,一般是30天。這種緩存的效率是最高的。讀存取的速度最快。
數(shù)據(jù)庫緩存
和
文件緩存比較簡單。適用小的項目。和php新手
你的這個要求可以設置一個定時任務,在特定的時間點,清除緩存,再去生成新的緩存,我常用的就少用PHP 寫一個方法,然后在服務器設置一個定時任務,去跑相應的方法就好了