- 介紹
- memcached是一個高性能分布式內存對象緩存系統, 通常用于在動態web應用上減緩數據庫加載壓力以提高速度.
- 這個擴展使用libmemcached庫提供的api和memcached服務端進行交互, 它也同樣提供了一個session處理器(memcached)
- 關于libmemcached的信息參見http://tangent.org/552/libmemcached.html
- 失效時間
- 一些存儲命令控制發送一個過期值(與一個存儲項或一個操作請求的客戶端相關)到服務端. 這個值可以是一個Unix時間戳(自1970年1月1日起的秒數), 或者從現在起的時間差. 對于后一種情況, 時間差秒數不能超過60 * 60 * 24 * 30(30天的秒數), 如果過期時間超過這個值, 服務端會將其作為Unix時間戳與現在時間進行比較.
- 如果過期值為0(默認), 此項永不過期(但是它可能會因為為了給其他項分配空間而被刪除)
- 返回回調
- 返回回調在Memcached::getDelayed或Memcached::getDelayedByKey方法獲取到每個元素時被調用. 回調函數中可以接受到Memcached對象和數組結構的元素信息, 并且回調函數不會返回任何值.
- READ-THROUGH緩存回調
- Read-through緩存回調在元素沒有從服務端檢索到時被調用. 回調接受Memcached對象, 請求key, 值變量的引用等三個參數, 回調函數可以返回true或false來響應值的設置. 如果回調函數返回true, memcached將會把$value值保存到服務端兵器返回到原來的調用函數中.
- 僅僅Memcached::get和Memcached::getByKey支持這些回調, 因為memcache協議在請求多個key時不提供哪個key未找到的信息.
- API
- Memcached::add(string $key, mixed $value[, int $expiration])
- 在新的key西面添加一個元素, 如果key已經存在則失敗. 成功返回TRUE, 失敗返回FALSE. 如果key已經存在Memcached::getResultCode將返回Memcached::RES_NOTSTORED
- Memcached::addByKey(string $server_key, string $key, mixed $value[, int $expiration])
- 向指定服務器指定key增加一個元素, 與add的區別在于此方法可以指定服務器, 這個在需要將一些相關key存放到一臺服務器時很有用.
- Memcached::addServer(string $host, int $port[, int $weight])
- 向服務器池中添加一臺服務器. 在這個時機是不會建立連接的, 但是, 如果使用consitent key分布方式, 一些內部的數據結構將會被更新, 不過, 如果你需要添加多臺服務器, 最好使用Memcached::addServers, 這種更新就只會發生一次.
- 相同的服務器可以多次出現在服務器池中, 因為這里沒有重復檢測. 當然, 這是不好的方式, 我們可以用weight選項來提供服務器被選中的權重.
- Memcached::addServers(array $servers)
- 向服務器池中增加多臺服務器. 每臺服務器信息以一個數組方式提供(主機名, 端口以及可選的權重), 此時不會建立連接.
- 相同的服務器可以多次出現在服務器池中, 因為這里沒有重復檢測. 當然, 這是不好的方式, 我們可以用weight選項來提供服務器被選中的權重.
- Memcached::append(string $key, string $value)
- 將一個字符串值追加到已有的元素后面
- Memcached::appendByKey(string $server_key, string $key, string $value)
- 等同于append, 增加了指定服務器的選項
- Memcached::cas(double $cas_token, string $key, mixed $value[, int expiration])
- 此函數執行一個”檢查設置”的操作, 因此, 元素僅僅會在從當前客戶端到現在其他客戶端沒有對其更新的情況下才會被寫入. 這個檢查是通過memcache指定給已有元素的一個唯一的64位值cas_token參數來實現的.
- 關于怎么獲取到這個標記(cas_token)參見Memcached::get*方法的文檔.
- Memcached::casByKey(double $cas_token, string $server_key, string $key, mixed $value[, int $expiration])
- 等同于cas方法, 不過可以指定服務器.
- Memcached::__construct([string $persistent_id])
- 構造器, 創建一個代表memcache服務連接的實例.
- 默認情況下Memcached實例會在請求結束后被銷毀, 如果要在多個請求之間共享實例, 使用persistent_id參數指定一個唯一的id, 所有通過相同persistent_id創建的實例將會共享連接.
- Memcached::decrement(string $key[, $int $offset])
- 將一個數字元素的值減小offset, 如果元素值不是數值, 將其作為0處理. 如果操作會將此值改變為小于0的值, 則使此值為0. 如果key不存在, 此方法執行失敗.
- offset默認1
- Memcached::delete(string $key[, int $time])
- 從服務器刪除key, time參數指客戶端期望的服務器拒絕這個key的add和replace命令的總秒數. 在這段時間里, 元素被加入到一個刪除序列, 也就是說它不能用get命令檢索到, 這個key的add和replace命令也會失敗(不過set命令會成功), 在這個時間過去后, 元素最終被從服務器內存刪除. time參數默認是0(也就是說元素立即被刪除并且后續的關于此key的存儲命令會成功).
- Memcached::deleteByKey(string $server_key, string $key[, int $time])
- 等同于delete, 不過可以指定服務器
- Memcached::fetch(void)
- 返回最后一次請求的下一個值
- Memcached::fetchAll(void)
- 一次檢索出最后一次請求的所有值
- Memcached::flush([int $delay])
- 使所有已經存在于緩存中的元素立即(默認)或在delay延遲之后失效. 失效后的元素不會再被檢索到(除非在flush之后又進行了存儲), flush不會整整的釋放所有的已存在元素的內存, 而是可以在這些內存上重新存放新的元素.
- Memcached::get(string $key[, callback $cache_cb[, double &$cas_token]])
- 返回事先存儲在key下的元素, 如果元素查找到并且提供了cas_token參數, cas_token將會被設置為此元素的CAS標記. CAS標記的使用參見Memcached::cas方法. Read-through緩存回調通過cache_cb參數指定
- Memcached::getByKey(string $server_key, string $key[, callback $cache_cb[, double &$cas_token]])
- 等同于get, 不過可以通過server_key指定服務器
- Memcached::getDelayed(array $keys[, bool $with_cas[, callback $value_cb]])
- 用于向memcache請求獲取keys數組指定的多個key對應的元素. 這個方法不會等待服務端返回, 當你需要讀取收集元素的時候, 調用Memcached::fetch或Memcached::fetchAll. 如果with_cas設置為true, CAS標記也會被請求.
- 作為抓取結果的替代方案, 可以指定value_cb參數作為返回回調來處理返回結果
- Memcached::getDelayedByKey(string $server_key, array $keys[, bool $with_cas[, callback $value_cb]])
- 等同于getDelayed, 提供了server_key用于指定服務器
- Memcached::getMulti(array $keys[, array &$cas_tokens[, integer $flags]])
- 與get類似, 但是這個方法用于檢索keys數組指定的多個key對應的元素. 如果cas_tokens變量提供了, 將會被填充為被發現的元素的CAS標記.
- 注意: 此方法不能指定Read-through緩存回調, 因為memcache協議不能提供多個key請求時未發現的key的信息
- flags參數用于指定附加選項, 目前僅支持Memcached::GET_PRESERVE_ORDER以保證返回與請求的key順序一致.
- Memcached::getMultiByKey(string $server_key, array $keys[, string &$cas_tokens[, integer $flags]])
- 等同于getMulti, 不過可以通過server_key指定服務器
- Memcached::getOption(int $option)
- 返回Memcached選項值, 一些選項是libmemcached定義的, 另外一些特殊的是Memcached擴展特有的. 更詳細信息參見Memcached常量
- Memcached::getResultCode(void)
- 返回Memcached::RES_*常量中的一個來表明Memcached最后一個方法的執行結果
- Memcached::getResultMessage(void)
- 返回Memcached最后一個執行的方法的執行結果的字符串描述
- Memcached::getServerByKey(string $server_key)
- 返回指定server_key對應的服務器信息, server_key等同所有Memcached::*ByKey方法中的server_key參數
- Memcached::getServerList(void)
- 返回服務器池中所有服務器列表
- Memcached::getStats(void)
- 返回一個數組, 包含所有當前可用memcache服務器狀態信息. 關于這些統計信息的詳細規范參見memcache 協議
- Name Type Meaning
- ----------------------------------
- pid 32u Process id of this server process服務端進程號
- uptime 32u Number of seconds this server has been running服務器運行時間
- time 32u current UNIX time according to the server當前服務器時間戳
- version string Version string of this server服務器版本信息
- pointer_size 32 Default size of pointers on the host OS
- (generally 32 or 64)主機系統的位數(通常是32或64)
- rusage_user 32u:32u Accumulated user time for this process
- (seconds:microseconds)此進程累積使用的user CPU時間(秒:微秒)
- rusage_system 32u:32u Accumulated system time for this process
- (seconds:microseconds)此進程累積使用的system CPU時間(秒:微秒)
- curr_items 32u Current number of items stored by the server服務器當前存儲的元素數量
- total_items 32u Total number of items stored by this server
- ever since it started自服務開啟曾經存儲過的元素數量
- bytes 64u Current number of bytes used by this server
- to store items當前用于元素存儲使用的內存容量
- curr_connections 32u Number of open connections當前打開連接數
- total_connections 32u Total number of connections opened since
- the server started running自服務開啟總共打開過的連接數
- connection_structures 32u Number of connection structures allocated by the server分配給服務器的連接結構數
- cmd_get 64u Cumulative number of retrieval requests累積檢索請求數量
- cmd_set 64u Cumulative number of storage requests累積存儲請求數量
- get_hits 64u Number of keys that have been requested and
- found present緩存命中的數量
- get_misses 64u Number of items that have been requested
- and not found緩存未命中數量
- evictions 64u Number of valid items removed from cache
- to free memory for new items為給新元素分配空間而移除的有效元素數量
- bytes_read 64u Total number of bytes read by this server
- from network通過網絡從此服務器讀取的總字節數
- bytes_written 64u Total number of bytes sent by this server to
- network通過網絡向此服務器發送的總字節數
- limit_maxbytes 32u Number of bytes this server is allowed to
- use for storage. 此服務器允許存儲的字節數
- threads 32u Number of worker threads requested. 工作線程數
- (see doc/threads.txt)
- Memcached::getVersion(void)
- 返回一個包含所有可用服務器的版本信息的數組
- Memcached::increment(string $key[, int $offset])
- 以offset作為差值增加指定key對應數值元素的值, 如果元素不是數值, 以0處理. 如果key不存在, 此方法失敗.
- offset默認1
- Memcached::prepend(string $key, string $value)
- append的反向追加
- Memcached::prependByKey(string $server_key, string $key, string $value)
- 等同于prepend, 可以通過server_key指定服務器
- Memcached::replace(string $key, mixed $value[, int $expiration])
- 與set類似, 但是這個方法在key不存在的時候會失敗
- Memcached::replaceByKey(string $server_key, string $key, mixed $value[, int $expiration])
- 等同于replace, 只是多出一個server_key用來指定服務器
- Memcached::set(string $key, mixed $value[, int $expiration])
- 將值存儲到memcache服務器的指定key下. expiration參數可以用于控制值的失效.
- value可以是除了資源類型之外的任意PHP類型, 因為資源類型被序列化后不能重現, 如果Memcached::OPT_COMPRESSION選項被開啟, 序列化值將被首先壓縮
- Memcached::setByKey(string $server_key, string $key, mixed $value[, int $expiration])
- 等同于set, 可以通過server_key指定服務器
- Memcached::setMulti(array $items[, int $expiration])
- 與set類似, 用于設置多個key-value到緩存中, expiration指定所有的元素的失效時間
- Memcached::setMultiByKey(string $server_key, array $items[, int $expiration])
- 等同于setMulti, 不過可以通過server_key指定服務器
- Memcached::setOption(int option, mixed $value)
- 用于設置Memcached選項, 其中Memcached::OPT_HASH需要設置為Memcached::HASH_*系列常量, Memcached::OPT_DISTRIBUTION需要設置為Memcached::DISTRIBUTON_*系列常量