PHP數(shù)據(jù)緩存常用頁(yè)面緩存 靜態(tài)緩存

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、石龍網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為石龍等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
php頁(yè)面緩存主要用到的是ob系列函數(shù),如ob_start(),ob_end_flush(),ob_get_contents()
靜態(tài)緩存是指靜態(tài)化,直接生成HTML或XML等文本文件,有更新的時(shí)候重生成一次,適合于不太變化的頁(yè)面
給你個(gè)頁(yè)面緩存的例子
function page_cache($ttl = 0)
{
$ttl = $ttl ? $ttl : PAGE_TTL;//緩存時(shí)間,默認(rèn)3600s
$contents = ob_get_contents();//從緩存中獲取內(nèi)容
$contents = "!--page_ttl:".(time() + $ttl)."--n".$contents;
//加上自定義頭部:過(guò)期時(shí)間=生成時(shí)間+緩存時(shí)間
file_put_contents(PAGE_FILE, $contents);//寫(xiě)入緩存文件中
ob_end_flush();//釋放緩存
}
這個(gè)原本就是比較麻煩的,
一種方法就是按照我現(xiàn)在做的,定期更新數(shù)據(jù),給緩存數(shù)據(jù)一個(gè)生命周期。
第二種方式也是比較實(shí)在的就是在更新系統(tǒng)中加入對(duì)緩存的作廢機(jī)制,這樣就可以很好的解決了數(shù)據(jù)更新不及時(shí)的問(wèn)題。
考慮到你公司的數(shù)據(jù)非常龐大,故第一種方法可能更加有效一些,可以把網(wǎng)頁(yè)中所需要的數(shù)據(jù)采用后臺(tái)程序定期生成的方式來(lái)實(shí)現(xiàn),這樣可以很好的提高瀏覽效率,而且也不會(huì)影響到第一次瀏覽的速度。
php的緩存三種.有文件緩存,數(shù)據(jù)庫(kù)緩存,memcache緩存;
memcache緩存要求對(duì)服務(wù)器支持,而且它的緩存是由期限的,一般是30天。這種緩存的效率是最高的。讀存取的速度最快。
數(shù)據(jù)庫(kù)緩存
和
文件緩存比較簡(jiǎn)單。適用小的項(xiàng)目。和php新手
?php
/**
* Redis緩存操作
* @author hxm
* @version 1.0
* @since 2015.05.04
*/
class RCache extends Object implements CacheFace
{
private $redis = null; //redis對(duì)象
private $sId = 1; //servier服務(wù)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服務(wù)
*
* @access private
* @param string $key 關(guān)鍵字
* @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服務(wù)選擇
if ( ! $server[$sid])
{
throw new QException('當(dāng)前操作的緩存服務(wù)器配置文件不存在');
}希望能幫到你,我還在后盾網(wǎng)學(xué)習(xí)呢,有不會(huì)的可以問(wèn)我,一會(huì)有空回答你。( ^ω^)
1、普遍緩存技術(shù):
數(shù)據(jù)緩存:這里所說(shuō)的數(shù)據(jù)緩存是指數(shù)據(jù)庫(kù)查詢(xún)PHP緩存機(jī)制,每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存數(shù)據(jù)是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),并把查詢(xún)結(jié)果序列化后保存到文件中,以后同樣的查詢(xún)結(jié)果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結(jié)果ID緩存到一個(gè)表中,下次搜索相同關(guān)鍵字時(shí)先搜索緩存表。
舉個(gè)常用的方法,多表關(guān)聯(lián)的時(shí)候,把附表中的內(nèi)容生成數(shù)組保存到主表的一個(gè)字段中,需要的時(shí)候數(shù)組分解一下,這樣的好處是只讀一個(gè)表,壞處就是兩個(gè)數(shù)據(jù)同步會(huì)多不少步驟,數(shù)據(jù)庫(kù)永遠(yuǎn)是瓶頸,用硬盤(pán)換速度,是這個(gè)的關(guān)鍵點(diǎn)。
2、 頁(yè)面緩存:
每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存頁(yè)面文件是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),顯示頁(yè)面并同時(shí)生成緩存頁(yè)面文件,這樣下次訪問(wèn)的時(shí)候頁(yè)面文件就發(fā)揮作用了。(模板引擎和網(wǎng)上常見(jiàn)的一些PHP緩存機(jī)制類(lèi)通常有此功能)
3、 時(shí)間觸發(fā)緩存:
檢查文件是否存在并且時(shí)間戳小于設(shè)置的過(guò)期時(shí)間,如果文件修改的時(shí)間戳比當(dāng)前時(shí)間戳減去過(guò)期時(shí)間戳大,那么就用緩存,否則更新緩存。
4、 內(nèi)容觸發(fā)緩存:
當(dāng)插入數(shù)據(jù)或更新數(shù)據(jù)時(shí),強(qiáng)制更新PHP緩存機(jī)制。
5、 靜態(tài)緩存:
這里所說(shuō)的靜態(tài)緩存是指靜態(tài)化,直接生成HTML或XML等文本文件,有更新的時(shí)候重生成一次,適合于不太變化的頁(yè)面,這就不說(shuō)了。
以上內(nèi)容是代碼級(jí)的解決方案,我直接CP別的框架,也懶得改,內(nèi)容都差不多,很容易就做到,而且會(huì)幾種方式一起用,但下面的內(nèi)容是服務(wù)器端的緩存方案,非代碼級(jí)的,要有多方的合作才能做到
6、 內(nèi)存緩存:
Memcached是高性能的,分布式的內(nèi)存對(duì)象PHP緩存機(jī)制系統(tǒng),用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫(kù)負(fù)載,提升訪問(wèn)速度。
7、 php的緩沖器:
有eaccelerator, apc, phpa,xcache,這個(gè)這個(gè)就不說(shuō)了吧,搜索一堆一堆的,自己看啦,知道有這玩意就OK
8、 MYSQL緩存:
這也算非代碼級(jí)的,經(jīng)典的數(shù)據(jù)庫(kù)就是用的這種方式,看下面的運(yùn)行時(shí)間,0.09xxx之類(lèi)的
9、 基于反向代理的Web緩存:
如Nginx,SQUID,mod_proxy(apache2以上又分為mod_proxy和mod_cache)
本文標(biāo)題:php如何緩存數(shù)據(jù),php常用的緩存技術(shù)匯總php技術(shù)之緩存機(jī)制的好處
分享地址:http://chinadenli.net/article34/dsgssse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、ChatGPT、小程序開(kāi)發(fā)、網(wǎng)站制作、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容