php內(nèi)存緩存實(shí)現(xiàn)程序代碼

php內(nèi)存緩存實(shí)現(xiàn)程序代碼

1、普遍緩存技術(shù):
數(shù)據(jù)緩存:這里所說(shuō)的數(shù)據(jù)緩存是指數(shù)據(jù)庫(kù)查詢PHP緩存機(jī)制,每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存數(shù)據(jù)是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),并把查詢結(jié)果序列化后保存到文件中,以后同樣的查詢結(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)是瓶頸,用硬盤換速度,是這個(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)上常見的一些PHP緩存機(jī)制類通常有此功能)
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ō)了。

本文章要來(lái)講述關(guān)于php中內(nèi)存緩存的一些方法,下面我們介紹Memcached緩存和php自帶的APC緩存方法。

1.Memcached緩存。
memcached是高性能的分布式內(nèi)存緩存服務(wù)器,通過(guò)緩存數(shù)據(jù)庫(kù)查詢結(jié)果,減少數(shù)據(jù)庫(kù)訪問(wèn)次數(shù),以提高動(dòng)態(tài)Web應(yīng)用的速度。memcached 使用了“Key=>Value”方式組織數(shù)據(jù)??梢栽试S不同主機(jī)上的多個(gè)用戶同時(shí)訪問(wèn)這個(gè)緩存系統(tǒng),一般用于大型網(wǎng)站使用。memcached使用內(nèi)存緩存數(shù)據(jù),所以它是易失的,當(dāng)服務(wù)器重啟,或者memcached進(jìn)程中止,數(shù)據(jù)便會(huì)丟失,所以 memcached不能用來(lái)持久保存數(shù)據(jù)。

過(guò)php_memcache的人都會(huì)覺得 PHP內(nèi)存緩存是一個(gè)很復(fù)雜的東西,其實(shí)不然。
memcached 是高效、快速的分布式內(nèi)存對(duì)象緩存系統(tǒng),主要用于加速 WEB 動(dòng)態(tài)應(yīng)用程序。
這里介紹memcached在WIN32下的配置及其使用。

一、PHP內(nèi)存緩存的配置(WIN32環(huán)境)

1、下載php_memcache.rar,請(qǐng)從附件下載。

解壓壓縮包:php_memcache.rar

php_memcache.rar壓縮包里主包含的文件有:

/memcached-1.2.1-win32/memcached.exe
/php_memcache/php_memcache.dll

2、打開命令提示符,指向到memcached.exe所在路徑,運(yùn)行memcached.exe -d start。

3、將php_memcache.dll文件拷貝到PHP的動(dòng)態(tài)文件庫(kù)的文件夾下。

4、在php.ini文件中加入一行extension=php_memcache.dll。

5、重新啟動(dòng)Apache,然后查看一下phpinfo,如果有memcache,那么就說(shuō)明安裝成功!

例:
代碼如下 復(fù)制代碼

<?php
//包含 memcached 類文件
require_once('memcached-client.php');

//選項(xiàng)設(shè)置
$options = array(
'servers' => array('www.hxsd.com:11211'),//memcached 服務(wù)的地址、端口
'debug' => true,//是否打開debug
'compress_threshold' => 10240,//超過(guò)多少字節(jié)的數(shù)據(jù)時(shí)進(jìn)行壓縮
'persistant' => false//是否使用持久連接
);

//實(shí)例化memcached對(duì)象
$memcached = new memcached($options);

$sql = 'SELECT * FROM table1';
$key = md5($sql);

//如果在memcached中沒(méi)有緩存數(shù)據(jù),把緩存數(shù)據(jù)寫入memcached
if(!($datas = $memcached->get($key)))
{
$conn = mysql_connect('localhost', 'hxsd', '123456');
mysql_select_db('hxsd');
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
$datas[] = $row;
}
//將數(shù)據(jù)庫(kù)中獲取到的結(jié)果集數(shù)據(jù)保存到 memcached 中,以供下次訪問(wèn)時(shí)使用。
$memcached->add($key, $datas);
}
else
{
//直接使用memcached中的緩存數(shù)據(jù)$datas
}
?>

內(nèi)存緩存二

APC、EC、Zend加速器的比較

一、APC

APC,全稱是Alternative PHP Cache,官方翻譯叫”可選PHP緩存”。

主頁(yè)是 http://pecl.php.net/package/apc

php幫助手冊(cè)頁(yè)面: http://cn.php.net/apc

APC是個(gè)優(yōu)化器,自安裝之日起,就默默地在后臺(tái)為您的PHP應(yīng)用服務(wù)了.您的所有PHP代碼會(huì)被緩存起來(lái). (針對(duì)php opcode)

另外,APC可提供一定的內(nèi)存緩存功能.但是這個(gè)功能并不是十分完美,有報(bào)告說(shuō)如果頻繁使用APC緩存的寫入功能,會(huì)導(dǎo)致不可預(yù)料的錯(cuò)誤.如果想使用這個(gè)功能,可以看看apc_fetch,apc_store等幾個(gè)與apc緩存相關(guān)的函數(shù).

安裝:
代碼如下 復(fù)制代碼

pecl install APC

配置:(/etc/php.inc)
代碼如下 復(fù)制代碼

extension=apc.so

[apc]
代碼如下 復(fù)制代碼

apc.enabled = 1

apc.shm_segments = 1

apc.shm_size = 30

apc.optimization = 0

apc.ttl = 7200

apc.user_ttl = 7200

apc.num_files_hint = 1000

apc.mmap_file_mask = /tmp/apc.XXXXXX

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、MemCache簡(jiǎn)介 session MemCache是一個(gè)自由、源碼開放、高性能、分布式的分布式內(nèi)存對(duì)象緩存...
    李偉銘MIng閱讀 4,008評(píng)論 2 13
  • 1、memcache的概念? Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨...
    桖辶殤閱讀 2,358評(píng)論 2 12
  • php緩存技術(shù) 普遍緩存技術(shù) 數(shù)據(jù)緩存:這里所說(shuō)的數(shù)據(jù)緩存是指數(shù)據(jù)庫(kù)查詢緩存,每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的...
    桖辶殤閱讀 2,318評(píng)論 0 4
  • 轉(zhuǎn)載自cr180大神DiscuzX2.5完整目錄結(jié)構(gòu)【source程序文件庫(kù)】 /source/admincp后臺(tái)...
    cndaqiang閱讀 1,013評(píng)論 1 2
  • 緩存,顧名思義,就是臨時(shí)存儲(chǔ)信息以提高訪問(wèn)性能。PHP的緩存技術(shù)大體可分為三大類: 1. 緩存內(nèi)容(Caching...
    wsdadan閱讀 2,756評(píng)論 0 1

友情鏈接更多精彩內(nèi)容