Memcache/Memcached的PHP操做手冊(純手稿版)

Memcache和Memcached 實際上是一個東西,只是php中要是用的擴展不同, 2009年左右有人豐富memcache的用法和性能,編寫了一個libmemcached是獨立第三方client library,纔有了memcached ,用法也有了很大的改進好比添加了 getMulti() 批量獲取鍵值php

windows下只能安裝php_memcache.dll 擴展並不存在 php_memcached.dll, 因此windows 中只能使用$mcd = new Memcache() 不能使用new Memcached()linux


Memcache 類

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
$memcache->pconnec('127.0.0.1', 11211); 
// 打開一個到服務器的持久化鏈接 , 鏈接不會在腳本執行結束後或者close()被調用後關閉
$memcache->addServer('123.57.210.55', 11211,$persistent,$weight); 
// 向鏈接池中添加一個memcache服務器 $persistent 是否持久化鏈接 $weight 
   控制桶的數量提高被選中的權重 $timeout 表示連續持續時間
$memcache->set('name', 'TK'); 
// 默認存儲不壓縮 不過時 , 其中字符串和數值直接存儲,其餘類型序列化後存儲 
   set實際上是add方法和replace方法集合
$memcache->set('email', 'julylovin@163.com',MEMCACHE_COMPRESSED,5);
// MEMCACHE_COMPRESSED設置存儲是否壓縮 , 5表示5秒後過時可是最大隻能設置2592000秒(30天)
   若是設置爲0 表示永不過時, 能夠設置未來的時間戳
$memcache->set('info',array('age'=>'26','salary'=>'1000'));  
// 能夠直接存儲數組,redis中存儲須要手動serialize()序列化
$memcache->add('counter', '10', MEMCACHE_COMPRESSED, 0); 
//若是鍵值存在會返回false , 若是不存在, 和set方法同樣,生成一個counter的key並賦值10
$memcache->replace ('counter', '10');
 //若是鍵值不存在會返回false , 若是存在, 替換counter的值爲10
$memcache->increment('counter', 3); 
// 首先將元素當前值轉換成數值而後減去value 操做counter鍵值+3 
   若鍵不存在 則返回false 不能用於壓縮的鍵值操做,不然get鍵會失敗
$memcache->decrement('counter', 3); // 操做counter鍵值-3 , 若鍵不存在 則返回false
$memcache->delete('counter', 3); // 操做刪除鍵counter , 3表示3秒內刪除,默認是0即當即刪除
$memcache->flush(); //flush()當即使全部已經存在的元素失效
$memcache->getExtendedStats (); 
// 返回一個二維關聯數據的服務器統計信息。數組的key由host:port方式組成
$memcache->getServerStatus ('127.0.0.1'); // 獲取返回一個服務器的在線/離線狀態  0表示離線 非0在線
$memcache->getStats(); // 獲取服務器統計信息
$memcache->getVersion(); // 返回服務器版本信息
$memcache->setCompressThreshold ($threshold, $min_saving); 
//  開啓大值自動壓縮   $threshold設置壓縮閥值 2000字節 ,即字節數大於2K 就壓縮
    $min_saving  0--1之間  0.2表示壓縮20%
$memcache->setServerParams('memcache_host', 11211, 1, 15, true, '_callback_memcache_failure'); 
// $memcache->addServer('memcache_host', 11211, false, 1, 1, -1, false);
   已經經過addServer 配置過服務器 使用setServerParams 從新設置配置信息

Memcached 類

這次練習我是在linux上安裝了phpstorm,linux平臺開發配置看個人其餘文章redis

$memcached = new Memcached(); //   必須安裝memcached擴展 不會安裝看個人相關文章
#server_key名詞解釋#
#當臺服務IP和端口徹底連通好以後,構成一個hash環,$server_key纔會生效 
#$server_key 只是爲了存儲的key打個標記 好比有三臺 memcache服務器 (A B C ) , 指定 server_key 
'master-a' 'master-b' 'master-c' 分別存儲 會員 訂單 日誌 等等
$memcached->addServer('192.168.206.128',11211); // 鏈接服務器
$memcached->setOption(Memcached::OPT_COMPRESSION, false); 
//配置存儲不壓縮,壓縮value不利於遞增遞減
$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
//
$memcached->addServers(array( //添加多臺服務器分佈式
    array('192.168.206.128', 11311, 20),
    array('192.168.206.128', 11411, 30)
));
$memcached->flush(1); //1秒內清除全部元素
$memcached->set('name','TK');

$memcached->setByKey('server_master_db','mage','28');
# 指定 server_key server_master_db 存儲鍵mage


$memcached->setMulti(array('salary'=>'3000','email'=>'julylovin@163.com'));
// 存儲多個元素

$memcached->setMultiByKey('server_master_db',
                    array('salary'=>'3000','email'=>'julylovin@163.com')); 
//  'server_master_db'服務器 存儲多個元素
$memcached->add('name','TK'); // 鍵name不存在添加value 不然添加失敗

$memcached->addByKey('server_master_db','mname','MTK');
$memcached->append('key','-816'); // 鍵key的value後追加字符串 -816

$memcached->appendByKey('server_master_db','mname','-923');
$memcached->prepend('name','pre-') ; #向一個已存在的元素前面追加數據

$memcached->prependByKey('server_master_db','name','pre-') ; 
# 使用server_key自由的將key映射到指定服務器 向一個已存在的元素前面追加數據
$memcached->get('name');

$memcached->get('name',null,$cas); 
# 第2參數指定緩存回掉函數 ,不指定傳null 
# 若是元素被找到,而且返回變量 $cas 內部是經過引用變量回傳的

$memcached->getByKey('server_master_db','mname');  # 從特定的服務器檢索元素
$memcached->getAllKeys(); // bug 我一致返回是false
$memcached->cas($cas, 'name', 'TangKang');
#要與$memcached->get('name',null,$cas) 方法搭配用 才能夠拿到 $cas變量
#它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其餘客戶端修改的狀況下, 纔可以將值寫入
#這是Memcached擴展比Memcache擴展一個很是重要的優點
 在這樣一個系統級(Memcache自身提供)的衝突檢測機制(樂觀鎖)下, 咱們才能保證高併發下的數據安全

$memcached->casByKey($cas,'server_master_db', 'name', 'TangKang');
$memcached->increment('age','1'); 
#增長數值元素的值  若是元素的值不是數值類型,將其做爲0處理

$memcached->incrementByKey('server_master_db','age','1'); 
# 用於識別儲存和讀取值的服務器
$memcached->decrement('age','1');
#減小數值元素的值  若是元素的值不是數值類型,將其做爲0處理

$memcached->decrementByKey('server_master_db','age','1');
# 用於識別儲存和讀取值的服務器
$memcached->getDelayed(array('name', 'age'), true, null); 
# 請求多個元素, 若是with_cas設置爲true,會同時請求每一個元素的CAS標記 
  指定一個result callback來替代明確的抓取結果

$memcached->getDelayedByKey('server_master_db',array('name', 'age'), true, null);
$memcached->fetch(); 
# 搭配 $memcached->getDelayed()使用, 從最後一次請求中抓取下一個結果

$memcached->fetchAll();
#抓取最後一次請求的結果集中剩餘的全部結果
$memcached->getMulti(array('name', 'age')); #檢索多個元素

$memcached->getMultiByKey('server_master_db',array('mname', 'mage')); 
# 從特定服務器檢索多個元素
# 與 $this->memcached->fetchAll() 搭配使用
$memcached->getOption(Memcached::OPT_COMPRESSION); 
# 獲取Memcached的選項值
$memcached->getResultCode() ; 
# 返回最後一次操做的結果代碼   Memcached::RES_NOTSTORED

$memcached->getResultMessage() ; 
# 返回最後一次操做的結果描述消息
$memcached->getServerByKey('server_master_db') ; # 獲取一個key所映射的服務器信息

$memcached->getServerList() ; #  獲取服務器池中的服務器列表

$memcached->getStats() ; #  獲取服務器池的統計信息

$memcached->getVersion() ;  #  獲取服務器池中全部服務器的版本信息
$memcached->isPersistent() ; #判斷當前鏈接是不是長鏈接
$memcached->replace('name','pre-julylovin') ; 
#set()相似,可是若是 服務端不存在key, 操做將失敗

$memcached->replaceByKey('server_master_db','name','pre-julylovin') ; 
#setBykey()相似,可是若是 服務端不存在key, 操做將失敗
$memcached->resetServerList() ; //清楚服務器池信息
$memcached->setOption(Memcached::OPT_PREFIX_KEY, "widgets") ; 
#設置一個memcached選項

$memcached->setOptions(array()) ; 
#設置一個memcached選項
$memcached->setSaslAuthData($username , $password ) ; 
#setSaslAuthData 方法不存在
$memcached->touch('name', 10) ; 
#設置鍵name 10秒後過時(只適用30天以內的秒數) ,30天之後請設置時間戳

$memcached->touchByKey('server_master_db','name',10) ;
$memcached->delete('age',10); 
#10秒(秒數/時間戳)內刪除一個元素  這個鍵已經存在刪除隊列 
 該鍵對應的get、add、replace命令都不可用,直到刪除

$memcached->deleteByKey('server_master_db','age');

$memcached->deleteMulti(array('age','name')); #傳入array刪除多個key 

$memcached->deleteMultiByKey('server_master_db',array('age','name'));
$memcached->quit(); # 關閉全部打開的連接
相關文章
相關標籤/搜索