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服務端監聽埠。當使用Unix域socket的時候要設定此引數為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: 要獲取值的key或key陣列。
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()相反) 網路連線並不會立刻建立,而是直到真正使用的時候才建立。 因此在加入大量伺服器到連線池中時也是沒有開銷的,因為它們可能並不會被使用。
故障轉移可能在方法的任何一個層次發生,通常只要其他伺服器可用使用者就不會感受到。任何的socket或memcache伺服器級別的錯誤 (比如記憶體溢位)都可能導致故障轉移。而一般的客戶端錯誤比如使用Memcache::add嘗試增加一個已經存在的key則不會導致故障轉移。
16. array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit = 100 ]]] )
功能:返回一個二維關聯資料的伺服器統計資訊。陣列的key由host: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:指定經過壓縮實際儲存的值的壓縮率,支援的值必須在0和1之間。預設值是
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。