PHP記憶體快取功能memcached

2021-08-22 14:05:18 字數 3003 閱讀 9642

# cd libevent-1.1a

# ./configure --prefix=/usr

# make

# make install

# cd ..

# tar -xzf memcached-1.1.12.tar.gz

# cd memcached-1.1.12

# ./configure --prefix=/usr

# make

# make install安裝完成之後,memcached 應該在 /usr/bin/memcached。三、執行 memcached 守護程式執行 memcached 守護程式很簡單,只需乙個命令列即可,不需要修改任何配置檔案(也沒有配置檔案給你修改):/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd引數解釋:-d 以守護程式(daemon)方式執行 memcached;

-m 設定 memcached 可以使用的記憶體大小,單位為 m;

-l 設定監聽的 ip 位址,如果是本機的話,通常可以不設定此引數;

-p 設定監聽的埠,預設為 11211,所以也可以不設定此引數;

往 memcached 中寫入物件,$key 是物件的唯一識別符號,$val 是寫入的物件資料,$exp 為過期時間,單位為秒,預設為不限時間;get ($key)

從 memcached 中獲取物件資料,通過物件的唯一識別符號 $key 獲取;replace ($key, $value, $exp=0)

使用 $value 替換 memcached 中識別符號為 $key 的物件內容,引數與 add() 方法一樣,只有 $key 物件存在的情況下才會起作用;delete ($key, $time = 0)

刪除 memcached 中識別符號為 $key 的物件,$time 為可選引數,表示刪除之前需要等待多長時間。下面是一段簡單的測試**,**中對識別符號為 』mykey』 的物件資料進行訪問操作:

// 包含 memcached 類檔案

require_once(』memcached-client.php』);

// 選項設定

$options = array(

』servers』 => array(』192.168.1.1:11211』), //memcached 服務的位址、埠,可用多個陣列元素表示多個 memcached 服務

』debug』 => true, //是否開啟 debug

』compress_threshold』 => 10240, //超過多少位元組的資料時進行壓縮

』persistant』 => false //是否使用持久連線

); // 建立 memcached 物件例項

$mc = new memcached($options);

// 設定此指令碼使用的唯一識別符號

$key = 』mykey』;

// 往 memcached 中寫入物件

$mc->add($key, 』some random strings』);

$val = $mc->get($key);

echo "n".str_pad(』$mc->add() 』, 60, 』_』)."n";

var_dump($val);

// 替換已寫入的物件資料值

$mc->replace($key, array(』some』=>』haha』, 』array』=>』***』));

$val = $mc->get($key);

echo "n".str_pad(』$mc->replace() 』, 60, 』_』)."n";

var_dump($val);

// 刪除 memcached 中的物件

$mc->delete($key);

$val = $mc->get($key);

echo "n".str_pad(』$mc->delete() 』, 60, 』_』)."n";

var_dump($val);

?>是不是很簡單,在實際應用中,通常會把資料庫查詢的結果集儲存到 memcached 中,下次訪問時直接從 memcached 中獲取,而不再做資料庫查詢操作,這樣可以在很大程度上減輕資料庫的負擔。通常會將 sql 語句 md5() 之後的值作為唯一識別符號 key。下邊是乙個利用 memcached 來快取資料庫查詢結果集的示例(此**片段緊接上邊的示例**):

$sql = 』select * from users』;

$key = md5($sql); //memcached 物件識別符號

var_dump($datas);

?>可以看出,使用 memcached 之後,可以減少資料庫連線、查詢操作,資料庫負載下來了,指令碼的執行速度也提高了。之前我曾經寫過一篇名為《php 實現多伺服器共享 session 資料》文章,文中的 session 是使用資料庫儲存的,在併發訪問量大的時候,伺服器的負載會很大,經常會超出 mysql 最大連線數,利用 memcached,我們可以很好地解決這個問題,工作原理如下:

使用者訪問網頁時,檢視 memcached 中是否有當前使用者的 session 資料,使用 session_id() 作為唯一識別符號;如果資料存在,則直接返回,如果不存在,再進行資料庫連線,獲取 session 資料,並將此資料儲存到 memcached 中,供下次使用;

當前的 php 執行結束(或使用了 session_write_close())時,會呼叫 my_sess::write() 方法,將資料寫入資料庫,這樣的話,每次仍然會有資料庫操作,對於這個方法,也需要進行優化。使用乙個全域性變數,記錄使用者進入頁面時的 session 資料,然後在 write() 方法內比較此資料與想要寫入的 session 資料是否相同,不同才進行資料庫連線、寫入資料庫,同時將 memcached 中對應的物件刪除,如果相同的話,則表示 session 資料未改變,那麼就可以不做任何操作,直接返回了;

五、相關資源

memcached 官方**

php memcached client

本文**

Windows下安裝php的Memcache模組

一 安裝memcached.exe 2 進入d盤根目錄,在命令列狀態下輸入 d memcached.exe d install 至此memcached已經安裝成windows服務 3 在命令列下輸入 d memcached.exe d start 以啟動memcached服務,以後此服務將隨開機啟動...

Linux下快取伺服器的應用 Memcached

1 安裝memcached 2 安裝memcache php模組 3 測試指令碼 四 關於本文 正文 一 環境需求 安裝memcached需要libevent庫的支援,所以請在安裝memcached之前檢查有沒有安裝libevent。測試環境還需要php的支援,本文假設php已經安裝到 usr lo...

window下安裝php7的memcache擴充套件

安裝memcache 1.4.4 c memcached memcached.exe d install c memcached memcached.exe d start c memcached memcached.exe d stop 1.4.5 schtasks create sc onsta...