1. 程式人生 > >PHP操作Memcached

PHP操作Memcached

一、PHP連線Memcached

一個簡單的使用示例:

  $memcache = new Memcache;

  $memcache->connect("127.0.0.1",11211) or die("Memcached connected failed");

  echo "Memcached's version: " . $memcache->getVersion() . "<br />";

  $data = array(

  'url' => "http://www.cnblogs.com/wujuntian/",

  'name' => "程式設計人,在天涯

"

  );

  $memcache -> set("info",$data,0,10);

  $info = $memcache->get("info");

  echo '<pre>';

  print_r($info);

PHP操作Memcached的方法有面向過程的也有面向物件的,下面主要介紹面向物件的方法,面向過程的方法的使用是類似的,而且這些方法大多數跟Memcached的命令是一一對應的。

二、Memcache類:

1. bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )

功能:建立一個到memcached服務端的連線。

引數:

host:memcached服務端監聽主機地址。這個引數也可以指定為其他傳輸方式比如

      unix:///path/to/memcached.sock 來使用Unix或socket,在這種方式下,port引數必

      須設定為0

port:memcached服務端監聽埠。當使用Unixsocket的時候要設定此引數為0

timeout:連線持續(超時)時間,單位秒。預設值1秒,修改此值之前請三思,過長的連

      接持續時間可能會導致失去所有的快取優勢。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

備註:

    使用方法 Memcache::connect()開啟的連線在指令碼執行結束後會自動關閉。當然,你也可以使用方法 Memcache::close()來主動關閉。 同時你也可以使用memcache_connect()函式來獲取一個連線。

2. mixed Memcache::pconnect ( string $host [, int $port [, int $timeout ]] )

功能:開啟一個到伺服器的持久化連線。

引數:參照Memcache::connect()方法。

返回值:返回一個 Memcache 物件 或者在失敗時返回 FALSE

備註:

    Memcache::pconnect()和 Memcache::connect()非常類似,不同點在於這裡建立的連線是持久化的。 這個連線不會在指令碼執行結束後或者Memcache::close()被呼叫後關閉。 同樣你也可以使用函式memcache_pconnect()

3. bool Memcache::close ( void )

功能:關閉到memcached服務端的連線。

引數:無。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

備註:

    這個函式不會關閉持久化連線, 持久化連線僅僅會在web伺服器關機/重啟時關閉。與之對應的,你也可以使用memcache_close()函式。

4. bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )

功能:向key儲存一個元素值為 var。引數expire是以秒為單位的失效時間, 如果設定為0

     表明該元素永不過期(但是它可能會因為為了給其他項分配空間而被刪除)。如果你希

     望儲存的元素 經過壓縮(使用zlib),你可以設定flag的值為MEMCACHE_COMPRESSED

引數:

key: 要設定值的key

var: 要儲存的值,字串和數值直接儲存,其他型別序列化後儲存。

flag: 使用MEMCACHE_COMPRESSED指定對值進行壓縮(使用zlib)

expire:當前寫入快取的資料的失效時間。如果此值設定為0表明此資料永不過期。你可以

      設定一個UNIX時間戳或 以秒為單位的整數(從當前算起的時間差)來說明此資料

      的過期時間,但是在後一種設定方式中,不能超過 2592000秒(30天)。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

備註:

    資源型別變數(比如檔案或連線)不能被儲存在快取中,因為它們在序列化狀態不能被完整描述。同樣你也可以使用函式memcache_set()

5. bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

功能:增加一個條目到快取伺服器。

引數:參照Memcache::set()方法。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE。 如果這個key已經存在返回FALSE

備註:

    Memcache::add()方法在快取伺服器之前不存在key時, 以key作為key儲存一個變數var到快取伺服器。若key已存在則返回false。同樣可以使用函式memcache_add()

6. bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] )

功能:替換已經存在的元素的值。

引數:參照Memcache::set()方法。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

備註:

    Memcache::replace()通過key來查詢元素並替換其值。當key 對應的元素不存在時,Memcache::replace()返回FALSE。同樣你也可以使用函式memcache_replace()

7. string Memcache::get ( string $key [, int &$flags ] )

  array Memcache::get ( array $keys [, array &$flags ] )

功能:如果服務端之前有以key作為key儲存的元素,Memcache::get()方法此時返回之前存

      儲的值。你可以給Memcache::get()方法傳遞一個數組(多個key)來獲取一個數組的

      元素值返回的陣列僅僅包含從 服務端查詢到的key-value對。

引數:

key: 要獲取值的keykey陣列。

flags:如果給定這個引數(以引用方式傳遞),該引數會被寫入一些key對應的資訊。這些

     標記和Memcache::set()方法中的同名引數 意義相同。用int值的低位保留了

     pecl/memcache的內部用法(比如:用來說明壓縮和序列化狀態)。(譯註:最後一位

     表明是否序列化,倒數第二位表明是否經過壓縮, 比如:如果此值為1表示經過序列

     化,但未經過壓縮,2表明壓縮而未序列化,3表明壓縮並且序列化,0表明未經過壓

     縮和序列化,具體演算法可查詢linux檔案許可權演算法相關資料)

返回值:返回key對應的儲存元素的字串值或者在失敗或key未找到的時候返回FALSE

8. bool Memcache::delete ( string $key [, int $timeout = 0 ] )

功能:通過key刪除一個元素。 如果引數timeout指定,該元素會在timeout秒後失效。 同

      樣也可以使用memcache_delete()函式完成同樣功能。

引數:

key: 要刪除的元素的key

timeout:刪除該元素的執行時間。如果值為0,則該元素立即刪除,如果值為30,元素會在30

      秒內被刪除。

返回值:成功時返回 TRUE,或者在失敗時返回 FALSE

9. bool Memcache::flush ( void )

功能:清洗(刪除)已經儲存的所有的元素。

引數:無。

返回值:成功時返回 TRUE,或者在失敗時返回 FALSE

備註:

    Memcache::flush()立即使所有已經存在的元素失效。方法Memcache::flush() 並不會真正的釋放任何資源,而是僅僅標記所有元素都失效了,因此已經被使用的記憶體會被新的元素複寫。 同樣你也可以使用函式memcache_flush()完成相同功能。

10. int Memcache::increment ( string $key [, int $value = 1 ] )

功能:將指定元素的值增加value如果指定的key 對應的元素不是數值型別並且不能被轉

      換為數值, 會將此值修改為value. Memcache::increment() 不會在key對應元素不存

      在時建立元素。

引數:

key: 將要增加值的元素的key

value:引數value表明要將指定元素值增加多少。

返回值:成功時返回新的元素值 或者在失敗時返回 FALSE

備註:

    不要在經過壓縮儲存的元素上使用Memcache::increment(),因為這樣作會導致後續對Memcache::get()的呼叫失敗。

11. int Memcache::decrement ( string $key [, int $value = 1 ] )

功能:將指定元素的值減小value

引數:參照Memcache::increment()方法。

返回值:成功的時候返回元素的新值 或者在失敗時返回 FALSE

備註:

    新的元素的值不會小於0

    不要將Memcache::decrement()方法用於壓縮儲存的元素,那樣作會導致 Memcache::get()方法獲取值會失敗。

12. string Memcache::getVersion ( void )

功能:返回一個字串表示的服務端版本號。 同樣你也可以使用函式

      memcache_get_version()

引數:無。

返回值:返回服務端版本號或者在失敗時返回FALSE

13. int Memcache::getServerStatus ( string $host [, int $port = 11211 ] )

功能:返回一個伺服器的線上/離線狀態,你也同樣可以使用 函式

      memcache_get_server_status()

引數:

host: 主機監聽地址。

port: 主機監聽埠,預設11211

返回值:返回一個伺服器的狀態,0表示伺服器離線,非0表示線上。

14. array Memcache::getStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )

功能:返回一個關聯陣列的伺服器統計資訊。陣列key是統計資訊名, 值就是統計資訊的

      值。同樣你可以使用函式memcache_get_stats()

引數:

type:期望抓取的統計資訊型別,可以使用的值有{reset, malloc, maps, cachedump, slabs, 

      items,sizes}。 通過memcached協議指定這些附加引數是為了方便memcache開發者

      (檢查其中的變動)

slabid: 用於與引數type聯合從指定slab分塊拷貝資料,cachedump命令會完全佔用伺服器

      通常用於 比較嚴格的除錯。

limit: 用於和引數type聯合來設定cachedump時從服務端獲取的實體條數。

返回值:返回關聯陣列表示的伺服器統計資訊 或者在失敗時返回 FALSE

15.bool Memcache::addServer ( string $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callback $failure_callback [, int $timeoutms ]]]]]]]] )

功能:向連線池中新增一個memcache伺服器。

引數:

host:要連線的memcached服務端監聽的主機位置。這個引數通常指定其他型別的傳輸比

     如Unix域套接字使用 unix:///path/to/memcached.sock,這種情況下引數port 必須設

     置為0

port:要連線的memcached服務端監聽的埠。當使用UNIX域套接字連線時設定為0

persistent:控制是否使用持久化連線。預設TRUE

weight:為此伺服器建立的桶的數量,用來控制此伺服器被選中的權重,單個伺服器被選中

      的概率是相對於所有伺服器weight總和而言的。

timeout:連線持續(超時)時間(單位秒),預設值1秒,修改此值之前請三思,過長的連

      接持續時間可能會導致失去所有的快取優勢。

retry_interval:伺服器連線失敗時重試的間隔時間,預設值15秒。如果此引數設定為-1

      示不重試。此引數和persistent引數在擴充套件以 dl()函式動態載入的時候無效。

      每個失敗的連線結構有自己的超時時間,並且在它失效之前選擇後端服務請求時該結

      構會被跳過。一旦一個連線失效, 它將會被成功重新連線或被標記為失敗連線以在

      下一個retry_interval秒重連。 典型的影響是每個web服務子程序在服務於一個頁面

      時將會每retry_interval秒 嘗試重新連線一次。

status:控制此伺服器是否可以被標記為線上狀態。設定此引數值為FALSE並且retry_interval

      引數 設定為-1時允許將失敗的伺服器保留在一個池中以免影響key的分配演算法。對

      於這個伺服器的請求會進行故障轉移或者立即失敗, 這受限於

      memcache.allow_failover引數的設定。該引數預設TRUE,表明允許進行故障轉移。

failure_callback:允許使用者指定一個執行時發生錯誤後的回撥函式。回撥函式會在故障轉移

      之前執行。回撥函式會接受到兩個引數,分別是失敗主機的 主機名和埠號。

timeoutms

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

備註:

Memcache::addServer()增加一個伺服器到連線池中。通過Memcache::addServer() 開啟的連線將會在指令碼執行結束後自動關閉,也可以使用Memcache::close()進行手動關閉。 您也可以使用memcache_add_server()來新增伺服器。

當使用這個方法的時候(Memcache::connect()Memcache::pconnect()相反網路連線並不會立刻建立,而是直到真正使用的時候才建立。 因此在加入大量伺服器到連線池中時也是沒有開銷的,因為它們可能並不會被使用。

故障轉移可能在方法的任何一個層次發生,通常只要其他伺服器可用使用者就不會感受到。任何的socketmemcache伺服器級別的錯誤 (比如記憶體溢位)都可能導致故障轉移。而一般的客戶端錯誤比如使用Memcache::add嘗試增加一個已經存在的key則不會導致故障轉移。

16. array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )

功能:返回一個二維關聯資料的伺服器統計資訊。陣列的keyhost:port方式 組成,無效

      的伺服器返回的統計資訊被設定為false,同樣的,你可以使用函式

      memcache_get_extended_stats()

引數:參照Memcache::getStats()函式。

返回值:返回一個二維關聯陣列的伺服器統計資訊或者在失敗時返回FALSE

17. bool Memcache::setCompressThreshold ( int $threshold [, float $min_savings ] )

功能:開啟對於大值的自動壓縮。 同樣你也可以使用函式

      memcache_set_compress_threshold()

引數:

threshold:控制多大值進行自動壓縮的閾值。

min_saving:指定經過壓縮實際儲存的值的壓縮率,支援的值必須在01之間。預設值是

          0.2表示20%壓縮率。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

18.bool Memcache::setServerParams ( string $host [, int $port = 11211 [, int $timeout [, int $retry_interval = false [, bool $status [, callback $failure_callback ]]]]] )

功能:用於執行時修改伺服器引數。 同樣你可以使用函式memcache_set_server_params()

引數:

host:服務端監聽地址。

port:服務端監聽埠。

timeout:連線持續(超時)時間(單位秒),預設值1秒,修改此值之前請三思,過長的連

      接持續時間可能會導致失去所有的快取優勢。

retry_interval:伺服器連線失敗時重試的間隔時間,預設值15秒。如果此引數設定為-1

      示不重試。此引數和persistent引數在擴充套件以 dl()函式動態載入的時候無效。

status:控制此伺服器是否可以被標記為線上狀態。設定此引數值為FALSE並且retry_interval

      引數 設定為-1時允許將失敗的伺服器保留在一個池中以免影響key的分配演算法。對

      於這個伺服器的請求會進行故障轉移或者立即失敗, 這受限於

      memcache.allow_failover引數的設定。該引數預設TRUE,表明允許進行故障轉移。

failure_callback:允許使用者指定一個執行時發生錯誤後的回撥函式。回撥函式會在故障轉移

      之前執行。回撥函式會接受到兩個引數,分別是失敗主機的 主機名和埠號。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE