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 = 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 從新設置配置信息
這次練習我是在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(); # 關閉全部打開的連接