首頁 >後端開發 >php教程 >php-Memcached的安裝及使用

php-Memcached的安裝及使用

伊谢尔伦
伊谢尔伦原創
2016-11-21 17:34:412694瀏覽

一、簡介及安裝

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,看到以下部分

php-Memcached的安裝及使用

證明安裝成功。

二、超時時間

一些儲存命令在發送時會包含一個失效值(與一個元素或一個客戶端操作請求相關)到服務端。所有這類用法,實際發送的值可以 是一個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(&#39;localhost&#39;, 11211);
    $items = array(
        &#39;key1&#39; => &#39;value1&#39;,
        &#39;key2&#39; => &#39;value2&#39;,
        &#39;key3&#39; => &#39;value3&#39;
    );
    $m->setMulti($items);
    $m->getDelayed(array(&#39;key1&#39;, &#39;key3&#39;), true, &#39;result_cb&#39;);
    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(&#39;localhost&#39;, 11211);
    $profile_info = $m->get(&#39;user:&#39;.$user_id, &#39;user_info_cb&#39;);
    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— 從指定的伺服器」中刪除一個元素 是 mhid​​idid遠

Memcached: :deleteMultiByKey — Delete multiple items from a specific server

Memcached::fetch — 抓取下一個結果

Memcached::fetchAll — 抓取所有剩餘的結果

Memcached::fetchAll — 抓取所有剩餘的結果

Memcached::fetchAll — 抓取所有剩餘的結果

。 Memcached::get — 檢索一個元素

Memcached::getAllKeys — Gets the keys stored on all the servers

Memcached::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 server

Memcached::isPersistent — Check if a persitent connection to meache is 3hed cently created

Memcached ::prepend — 向一個已存在的元素前面追加資料

Memcached::prependByKey — Prepend data to an existing item on a specific server

Me.存在key下的元素

Memcached::replaceByKey — Replace the item under an existing key on a specific server

Memcached::resetServerList — Clears all servers from the server list listg ::setByKey — Store an item on a specific server

Memcached::setMulti — 儲存多個元素

Memcached::setMultiByKey — Store multiple items on a specjached::setMultiByKey — Store multiple items on a specspecached mc1ed ached ::setOptions — Set Memcached options

Memcached::setSaslAuthData — Set the credentials to use for authentication

Memcached::ouch — Set a new expiration on an 5,mcached::ouch — Set a item on a specific server

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn