1. 程式人生 > >基礎知識之php記憶體快取實現程式程式碼

基礎知識之php記憶體快取實現程式程式碼

php記憶體快取實現程式程式碼

1、普遍快取技術:
資料快取:這裡所說的資料快取是指資料庫查詢PHP快取機制,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。
用的最廣的例子看Discuz的搜尋功能,把結果ID快取到一個表中,下次搜尋相同關鍵字時先搜尋快取表。
舉個常用的方法,多表關聯的時候,把附表中的內容生成陣列儲存到主表的一個欄位中,需要的時候陣列分解一下,這樣的好處是隻讀一個表,壞處就是兩個資料同步會多不少步驟,資料庫永遠是瓶頸,用硬碟換速度,是這個的關鍵點。
2、頁面快取:
每次訪問頁面的時候,都會先檢測相應的快取頁面檔案是否存在,如果不存在,就連線資料庫,得到資料,顯示頁面並同時生成快取頁面檔案,這樣下次訪問的時候頁面檔案就發揮作用了。(模板引擎和網上常見的一些PHP快取機制類通常有此功能)
3、時間觸發快取:
檢查檔案是否存在並且時間戳小於設定的過期時間,如果檔案修改的時間戳比當前時間戳減去過期時間戳大,那麼就用快取,否則更新快取。
4、內容觸發快取:
當插入資料或更新資料時,強制更新PHP快取機制。
5、靜態快取:
這裡所說的靜態快取是指靜態化,直接生成HTML或XML等文字檔案,有更新的時候重生成一次,適合於不太變化的頁面,這就不說了。

本文章要來講述關於php中記憶體快取的一些方法,下面我們介紹Memcached快取和php自帶的APC快取方法。

1.Memcached快取。
memcached是高效能的分散式記憶體快取伺服器,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度。memcached 使用了“Key=>Value”方式組織資料。可以允許不同主機上的多個使用者同時訪問這個快取系統,一般用於大型網站使用。memcached使用記憶體快取資料,所以它是易失的,當伺服器重啟,或者memcached程序中止,資料便會丟失,所以 memcached不能用來持久儲存資料。

過php_memcache的人都會覺得 PHP記憶體快取是一個很複雜的東西,其實不然。
memcached 是高效、快速的分散式記憶體物件快取系統,主要用於加速 WEB 動態應用程式。
這裡介紹memcached在WIN32下的配置及其使用。

一、PHP記憶體快取的配置(WIN32環境)

1、下載php_memcache.rar,請從附件下載。

解壓壓縮包:php_memcache.rar

php_memcache.rar壓縮包裡主包含的檔案有:

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

2、開啟命令提示符,指向到memcached.exe所在路徑,執行memcached.exe -d start。

3、將php_memcache.dll檔案拷貝到PHP的動態檔案庫的資料夾下。

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

5、重新啟動Apache,然後檢視一下phpinfo,如果有memcache,那麼就說明安裝成功!

例:
程式碼如下 複製程式碼

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

//選項設定
$options = array(
'servers' => array('www.hxsd.com:11211'),//memcached 服務的地址、埠
'debug' => true,//是否開啟debug
'compress_threshold' => 10240,//超過多少位元組的資料時進行壓縮
'persistant' => false//是否使用持久連線
);

//例項化memcached物件
$memcached = new memcached($options);

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

//如果在memcached中沒有快取資料,把快取資料寫入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;
}
//將資料庫中獲取到的結果集資料儲存到 memcached 中,以供下次訪問時使用。
$memcached->add($key, $datas);
}
else
{
//直接使用memcached中的快取資料$datas
}
?>

記憶體快取二

APC、EC、Zend加速器的比較

一、APC

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

主頁是 http://pecl.php.net/package/apc

php幫助手冊頁面: http://cn.php.net/apc

APC是個優化器,自安裝之日起,就默默地在後臺為您的PHP應用服務了.您的所有PHP程式碼會被快取起來. (針對php opcode)

另外,APC可提供一定的記憶體快取功能.但是這個功能並不是十分完美,有報告說如果頻繁使用APC快取的寫入功能,會導致不可預料的錯誤.如果想使用這個功能,可以看看apc_fetch,apc_store等幾個與apc快取相關的函式.

安裝:
程式碼如下 複製程式碼

# pecl install APC

配置:(/etc/php.inc)
程式碼如下 複製程式碼

extension=apc.so

[apc]
程式碼如下 複製程式碼

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