自由開源的,高性能,分佈式內存對象緩存系統php
做用: 數據緩存 存儲session 短信驗證碼存儲
安裝
memcached是基於libevent,因此安裝memcached以前須要安裝libeventredis
set命令
將value(數據值)存儲到指定的key(鍵)中,若是指定的key已經存在,更新key所對應的值
語法:
set key flags expire bytes
參數:
key 鍵值key-value結構中的key,用於查找緩存
flags 能夠包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息
expire 在緩存中保存鍵值對的時間長度 以秒爲單位 0 表示永久
bytes 在緩存中存儲的字節長度
value 存儲的值
輸出信息
stored 表示存儲成功
error 保存信息出錯算法
get命令
獲取存儲在key(鍵)中的value(數據值)
語法
get key1 key2 key3 sql
gets命令
獲取帶有cas令牌存的value(數據值)
若是key不存在,則返回空
語法
gets key1 key2 key3
在使用gets命令的輸出結果中,在最後一列的數字表明當前key的cas令牌數據庫
cas命令
檢查並設置,這個命令僅在當前客戶端最後一次取值後,該key對應的值沒有被其餘客戶端修改的狀況下,才能將值寫入
語法
cas key flags expire bytes unique_cas_token
key 鍵值key-value結構中的key,用於查找緩存值
flags 能夠包括鍵值對的整型參數,客戶機使用它存儲關於鍵值的額外信息
expire 在緩存中保存鍵值對的時間長度 以秒爲單位 0 表示永久
bytes 在緩存中存儲的字節數
unique_cas_token 經過gets命令獲取的惟一的64位值
value 存儲的值緩存
delete命令
刪除已經存在的key(鍵)
delete key
語法:
delete key
參數說明
key 鍵值對key-value結構中的key,用於查找緩存值
輸出值說明
deleted 成功
error 語法錯誤或刪除失敗
not_found key 不存在安全
prepend / append 命令
在前面追加
prepend key flags expire bytes服務器
在後面追加
append key flage expire bytes
參數說明
key 鍵值key-value結構中的key,用於查找緩存值
flags 能夠包括鍵值對的整型參數
expires 在緩存中保存鍵值對的時間長度 單位是秒 0 表示永久有效
bytes 在緩存中的字節長度
value 存儲的值
輸出的信息
stored 成功
not stored 存儲失敗
client error 錯誤cookie
incr / decr 命令
對已存在的key(鍵)的數字值進行自增或自減操做
incr與decr命令操做的數據必須是十進制32位無符號整數
若是key不存在返回not found 若是鍵的值不爲數字,則返回client error 其餘錯誤返回error
語法
incr key increment_value
decr key decrement_value
參數說明
key 鍵值key-value結構中的key,用於查找緩存值
increment_value:增長的數值
decrement_value:減小的數值session
add 命令
將value(數據值)存儲在指定的key(鍵)中
若是add的key已經存在,則不會更新數據,以前的值仍然保持相同,而且將得到not stored
語法
add key flags expire bytes
參數說明
key 鍵值key-value結構中的key 用於查找緩存值
flags 能夠包括鍵值對的整型參數
expire 在緩存中保存鍵值對的時間長度 單位爲秒 0 表示永久
bytes 在緩存中存儲的字節長度
安裝libmemcached=>安裝memcached=>安裝php-memcached擴展
cookie與session
一、http request =》 二、http reponse+set cookie (sessionId) =》 三、http request+cookie => 四、http response
file存儲session的缺點:
一、文件IO讀寫慢 二、分佈式受限制
存儲session方式
文件緩存 redis緩存 memcahce緩存
重置服務器地址 $cache->resetServerList(); $cache->addServers( array(127.0.0.1,11211,60), array(127.0.0.1,11212,40), )
第三個參數對應服務器中的權重,來控制服務器被選中的機率
$cache->setMulti( array( key1=>value1, key2=>value2, key3=>value3 ),time()+900 ); $cache->get(key1); $cache->getMulti(key1,key2,...); //cas數據惟一性 多服務端 併發場景下 $cache->get('k1',null,$cas);
搶座買票 $cache->add(key,value,time()+900); $cache->increment(key,incr); $cache->decrement(key,decr);
incr與decr命令操做的數據必須是十進制的32位無符號整數,結果不會出現負值
注意事項
value < 1M key < 512 緩存實踐 < 30 day Mysql數據同步更新
優點
特徵
使用memcached實現分佈式算法
分佈式算法之餘數計算分散法
根據key來計算CRC,而後結果對服務器數進行取模獲得memcached服務器節點,服務器沒法連接的時候,將嘗試的連接次數加到key後面從新計算
缺點:添加或移除服務器時,幾乎全部緩存將重建,還考慮雪崩式崩潰問題
分佈式算法之一致性哈希算法
優勢:冗餘少 負載均衡 過分平滑 存儲均衡
使用memcached實現session共享
session存放在公用的memcached中,實現多服務器共享 缺點:集羣錯誤會致使用戶沒法登錄,回收機制可能致使用戶掉線