memcache基礎入門
介紹
-
分散式快取記憶體系統,訪問壓力大,作為快取層,緩解壓力
-
key,value,用來儲存小塊的任意資料(字串,物件),不支援LIst,array資料格式
-
非持久化儲存:丟失對系統也不會產生影響,斷電記憶體會被清除
-
分散式儲存:不適合單機使用。可以專門一臺伺服器作為memcache的部署,不要和應用部署在一起,很佔記憶體。
過程:首次訪問:從RDBMS中取得資料儲存到memcached;第二次後,從memcached中取得資料顯示頁面。
安裝
在mac上安裝的時候遇到了很多的問題,記錄下來,需要的同學方便檢視,不要浪費這麼的時間。
安裝方法
1.編譯安裝 libevent memcache
2.可以使用包依賴管理工具:yum(centos),apt-get(ubuntu)
3.mac上使用brew來進行安裝
mac具體安裝步驟
- brew install libevent
- brew install memcached
提示該使用者名稱目錄沒有許可權,用 whoami 檢視當前使用者名稱,執行命令sudo chown -R haojianfen /usr/local/Cellar ,正常此時就可以了。但提示(Operation not permitted問題),由於macos的系統版本過高,可以執行以下命令來解除安裝和重新安裝最新版本的brew可以成功安裝libevent和memcached了。
brew命令的安裝和解除安裝
解除安裝:/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)”
安裝:/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
注意:memcached是memcache的高階版本,建議學習memcached。
命令的學習
連線memcached
telnet host port,例如:telnet 127.0.0.1 1211
順便記錄一下登入mysql:
啟動memcached
brew services start memcached
Memcached儲存
set命令
memcache儲存,如果key存在則更新現有value。
set key flags exptime bytes value
flags:可以包括鍵值對的整型引數(32位無符號整數),客戶機使用它儲存關於鍵值對的額外資訊 ,把並沿資料返回伺服器儲存
exptime:以秒為單位,0標識永遠
bytes:資料儲存的位元組數
例子:如果是2,則value必須輸入2個字元
set a 0 900 2
sh
此時返回STORED:表示成功;ERROR:表示有問題。
add命令
這個和set的區別,如果存在key且沒有過期,就不進行更新,此時提示NOT_STORED。
replace命令
替換對應key的value值,如果不存在key,則輸出NOT_STORED;
append命令
在對應的key後邊追加值。如果不存在key,則輸出NOT_STORED;
prepend命令
在對應key的前邊追加值。如果不存在key,則輸出NOT_STORED;
cas命令
cas key flags exptime bytes unique_cas_token [noreply]
value
要在Memcached上使用CAS命令,你需要從Memcached服務商通過gets命令獲取令牌(token)。
CAS命令僅在當前客戶端最後一次取值後到修改該key時,這中間的時間段內該key沒有被其他客戶端修改的情況下, 才能夠將值寫入。
cas tp 0 99 9
ERROR:缺少token
cas tp 0 900 9 2
memcached
NOT_FOUND:鍵tp不存在
set tp 0 900 9
memcached
STORED
gets tp
VALUE tp 0 9 1
memcached
END
cas tp 0 900 5 1
redis
STORED
get tp
VALUE tp 0 5
redis
END
查詢命令
get命令
get key1 key2 key3
gets命令
獲取帶有CAS令牌存的value(資料值),如果key不存在,則返回空。
value行最後一列是CAS令牌
delete命令
delete key :返回DELETED表示刪除成功
incr和decr命令
用於已存在的key(鍵)的數字進行自增或自減操作。
incr與decr命令操作的資料必須是十進位制的32位無符號整數。
如果key不存在返回NOT_FOUND,如果鍵的值不為數字,則返回CLIENT_ERROR
統計命令
stats命令
stats
Memcached stats命令用於返回統計資訊例如PID(程序號)、版本號、連線數等。
http://www.runoob.com/memcached/memcached-stats.html 詳見參考
stats items命令
stats items命令用於顯示各個slab中item的數目和儲存時長(最後一次訪問距現在的秒數)
stats slabs命令
用於顯示各個slab的資訊,包括chunk的大小,數目,使用情況等。
stats sizes命令
用於顯示item的大小和個數。
flush_all命令
用於在指定時間清理快取操作。
flush_all [time] [noreply]
java memcached
try {
//連線
MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("127.0.0.1",11211));
System.out.println("connect successfully");
//set get
Future future = memcachedClient.set("a",900,"memcached");
System.out.println("status:"+ future.get());
System.out.println("get a:"+ memcachedClient.get("a"));
//add
Future future1 = memcachedClient.add("b",900,"bb");
//gets cas
CASValue casValue = memcachedClient.gets("a");
CASResponse response =memcachedClient.cas("a",casValue.getCas(),"redis");
System.out.println("修改後a的值:"+memcachedClient.get("a"));
//delete
memcachedClient.delete("v");
//統計
//stats
System.out.println("stats:"+memcachedClient.getStats());
//清除資料
System.out.println("stats items:"+memcachedClient.flush());
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}