一、簡介及安裝
memcached是一個高效能分散式的記憶體物件快取系統, 通常被用於降低資料庫載入壓力以提高動態web應用的反應速度。
此擴充功能使用了libmemcached函式庫提供的api與memcached服務端進行互動。它還提供了一個session處理器(memcached)。
關於memcached的安裝,可參考這篇文章:Ubuntu中memcached的安裝和配置。
在安裝php擴充memcached之前,需要先安裝libmemcached,libmemcached是memcached的C/C++本機客戶端程式庫。
安裝libmemcached之前,還要先安裝libcloog-ppl0,否則編譯安裝過程中會出錯:
sudo apt-get install libcloog-ppl0
然後從這裡http://libmemcached.org/libMemcached.html下載所需的libmemcacheded碼安裝包,解壓縮源到指定目錄,進入目錄,然後執行以下指令:
./configure --prefix=/usr/local/libmemcached make sudo make install
然後就可以進行php的memcached擴充功能的安裝了,從這裡下載所需的源碼安裝包:http://pecl.php.net/package/memcached ,解壓縮到指定目錄,進入該目錄,然後執行以下指令:
phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached make sudo make install
在安裝過程中可能會報錯:
未知类型名称:memcached_server_instance_st
而導致make失敗,解決方法如下:
在memcached擴展解壓目錄下找到這個檔案: php_libmemcached_compat.h,然後在其中加入下面這行
typedef const struct memcached_server_st *memcached_server_instance_st;
再一次make,就OK了。
安裝成功後,在php.ini中加入extension=memcacached,然後重啟apache,查看phpinfo,看到以下部分
證明安裝成功。
二、超時時間
一些儲存命令在發送時會包含一個失效值(與一個元素或一個客戶端操作請求相關)到服務端。所有這類用法,實際發送的值可以 是一個Unix時間戳(自1970年1月1日起至失效時間的整數秒數),或者是一個從現在算起的以秒為單位的數字。對於後一種情況,這個秒數不能超過60×60×24×30(30天時間的秒數);如果失效的值大於這個值, 服務端會將其作為一個真實的Unix時間戳來處理而不是自當前時間的偏移。
如果失效值被設定為0(預設),此元素永不過期(但是它可能由於服務端為了給其他新的元素分配空間而被刪除)。
三、回呼
1.結果回呼
Result callbacks方式在透過 Memcached::getDelayed()或Memcached::getDelayedBykey()方法取得元素後,為結果集中每個元素呼叫一次。 回呼函數可以接收到Memcached物件合一個陣列描述的元素訊息,此回呼函數不需要傳回任何訊息。
Example #1 結果回呼範例
<?php $m = new Memcached(); $m->addServer('localhost', 11211); $items = array( 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' ); $m->setMulti($items); $m->getDelayed(array('key1', 'key3'), true, 'result_cb'); function result_cb($memc, $item) { var_dump($item); } ?>
以上程式的輸出類似:
array(3) { ["key"]=> string(4) "key1" ["value"]=> string(6) "value1" ["cas"]=> float(49) } array(3) { ["key"]=> string(4) "key3" ["value"]=> string(6) "value3" ["cas"]=> float(50) }
2.通讀快取回呼
通讀快取回呼在一個元素沒有從服務端檢索到的時候被呼叫。這個回呼函數會接收到Memcached對象,請求的key以及 一個引用方式傳遞的值變數等三個參數。此回調函數負責透過傳回true或false來決定在key沒有值時設定一個預設值。 如果回呼回傳true,Memcached會儲存"傳出參數"(引用傳遞的值變數)儲存的值到memcached服務端並將其傳回原來 的呼叫函數中。僅 Memcached::get()和 Memcached::getByKey() 支援這類回調,因為Memcache協定不支援在請求多個key時提供未擷取到key的資訊。
Example #2 通讀回呼範例
<?php $m = new Memcached(); $m->addServer('localhost', 11211); $profile_info = $m->get('user:'.$user_id, 'user_info_cb'); function user_info_cb($memc, $key, &$value) { $user_id = substr($key, 5); /* 从数据库读取个人信息 */ /* ... */ $value = $profile_info; return true; } ?>
四、Sessions支援
memcached提供了一個自訂的session處理器可以用於儲存使用者session資料到memcached服務端。 一個完全獨立的memcached實例將會在內部使用,因此如果需要您可以設定一個不同的伺服器池。 session的 key被儲存在前綴memc.sess.key.之下,因此, 如果你對session和通常的快取使用了 同樣的伺服器池,請注意這一點。 譯註:另外一個session和通常緩存分離的原因是當通常的緩存佔滿了memcached服務端後,可能會導致你的session被 從緩存中踢除,導致用戶莫名的掉線。
session.save_handler 設定為memcached開啟memcached的session處理器。 session.save_path定義一個逗號分隔的hostname:port樣式的session快取伺服器池,例如: "sess1:11211, sess2:11211".
五、Memcached類別
表徵到memcached服務叢集的連線。
Memcached::add — 增加一個新的key下方一個元素
Memcached::addByKey — 在指定伺服器上的一個新的key下方增加一個元素
Memcached::addServer — 新增一個伺服器池
Memcached::addServers — 在伺服器池中增加多台伺服器
Memcached::append — 在已存在元素後追加資料
Memcached::appendByKey:: — 向指定伺服器上已存在元素後追加cas — 比較並交換值
Memcached::casByKey — 在指定伺服器上比較並交換值
Memcached::__construct — 建立一個Memcacheded
Meached::decrement — 建立一個Memcached decrementByKey — Decrement numeric item's value, stored on a specific server
Memcached::delete — 刪除一個元素
Memcached::deleteByKeycm— 從指定的伺服器中刪除一個元素
Memcached::deleteByKeycm— 從指定的伺服器」中刪除一個元素 是 mhididid遠
Memcached: :deleteMultiByKey — Delete multiple items from a specific serverMemcached::fetch — 抓取下一個結果Memcached::fetchAll — 抓取所有剩餘的結果Memcached::fetchAll — 抓取所有剩餘的結果Memcached::fetchAll — 抓取所有剩餘的結果。 Memcached::get — 檢索一個元素Memcached::getAllKeys — Gets the keys stored on all the serversMemcached::getByKey — 從特定的伺服器檢索::getDelayedByKey — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 檢索多個元素Memcached::getMultiByKey — 從特定伺服器擷取多個元素Meached
Memcached::getResultCode — 傳回上次作業的結果代碼
Memcached::getResultMessage — 傳回最後一次作業的結果描述訊息
Meached::getServerBy7835 — 取得伺服器集區中的伺服器清單
Memcached::getStats — 取得伺服器集的統計資料
Memcached::getVersion — 取得伺服器集區中所有伺服器的版本資訊
Memcached::increment
Memcached::incrementByKey — Increment numeric item's value, stored on a specific serverMemcached::isPersistent — Check if a persitent connection to meache is 3hed cently createdMemcached ::prepend — 向一個已存在的元素前面追加資料Memcached::prependByKey — Prepend data to an existing item on a specific serverMe.存在key下的元素Memcached::replaceByKey — Replace the item under an existing key on a specific serverMemcached::resetServerList — Clears all servers from the server list listg ::setByKey — Store an item on a specific serverMemcached::setMulti — 儲存多個元素Memcached::setMultiByKey — Store multiple items on a specjached::setMultiByKey — Store multiple items on a specspecached mc1ed ached ::setOptions — Set Memcached optionsMemcached::setSaslAuthData — Set the credentials to use for authenticationMemcached::ouch — Set a new expiration on an 5,mcached::ouch — Set a item on a specific server