Memcached
Java 客戶端連接 Memcached & Spring 集成
Memcached 簡介
Memcached 安裝配置
$ sudo apt-get update # 更新 apt 庫
$ sudo apt-get install libevent # 安裝 libevent 的二進制包
$ sudo apt-get install memcached # 安裝 memcached 的二進制包
Memcached 啓動和參數
$ memcached # 默認啓動 memcached
$ memcached -h # 查看 memcached 啓動參數說明
$ memcached -d # 後臺啓動 memcahed
- -d 以守護進程(後臺進程)的方式啓動 ;
- -m 分配給 Memcache 使用的內存上限,單位 MB,默認 64;
- -u 運行 Memcache 的用戶,默認值 memcache;
- -l 監聽的服務器 IP 地址,可以有多個 IP,默認值 127.0.0.1;
- -p 監聽的端口,最好設置爲 1024 以上的值,默認值 11211;
- -c 最大運行的併發連接數,默認 1024;
- -P 設置保存 Memcache 的 pid文件,當 memcahed 守護進程運行時,相關的 pid 會被寫入該文件,需要確保 memcache 有讀寫該文件的權限;
Memcached 的終端連接
$ telnet 127.0.0.1 11211 # 終端連接 memcached
set key1 0 0 5 # 添加鍵值
assad
STOTRED
get key1 # 獲取鍵值
VALUE assad
END
quit # 推出 telnet 連接
Memcached 常用鍵值讀寫指令
儲存指令
set key flags exptime bytes [noreply] value | 設置 key-value,如果 key 已經存在,則覆蓋該數據; 返回值 -- STORED:保存成功; ERROR:保存失敗 |
add key flags exptime bytes [noreply] value | 設置 key-value,如果 key 已經存在,則不更新數據; 返回值 -- STORED:保存成功; NOT_STORED:保存失敗 |
replace key flags exptime bytes [noreply] value | 替換 key-value,如果 key 已經存在,替換爲新設置的 value; 返回值 -- STORED:保存成功; NOT_STORED:保存失敗 |
append key flags exptime bytes [noreply] value | 後追加 key-value,如果 key 已經存在,則在該 key 的 value 後追加數據; 返回值 -- STORED:保存成功; NOT_STORED:保存失敗; CLIENT_ERROR:執行錯誤 |
prepend key flags exptime bytes [noreply] value | 前追加 key-value,如果 key 已經存在,則在該 key 的 value 前面追加數據 返回值 -- STORED:保存成功; NOT_STORED:保存失敗; CLIENT_ERROR:執行錯誤 |
cas key flags exptime bytes unique_cas_token [noreply] value | 檢查並設置 key-value (check-and-set),僅在當前客戶端最後一次取值後,該 key 的 value 還沒有被客戶端修改的情況下,才能將該值寫入,檢查是通過 unique_cas_token 參數進行的,該參數是由 gets 獲取的唯一一個 64 位值; 返回值 -- STORED:保存成功; ERROR:保存失敗; EXISTS:在最後一次取值另外一個用戶也在更新該數據; NOT_FOUND:不存在該數據; |
- key:key 字段;
- flags:可以包括鍵值對的整型參數,客戶端使用該參數值儲存鍵值對以外的信息;
- exptime:在緩存中保存鍵值對的時間長度,單位秒,0 表示永久;
- bytes:value 在緩存中儲存的字節數;
- noreply(可選):告知服務器不需要返回數據;
- value:儲存的 value 值(必須位於第二行);
# 關於 cas 指令的示例
set user 0 0 5 # 寫入 user = assad
assad
STORED
cas user 0 0 5 1 # 檢查並寫入 user = assad,cas令牌爲1
vancy
EXIST # cas 令牌無效
gets user # 獲取 user,並返回一個 cas 值
VALUE user 0 5 4 # 該 user 的 cas 值爲 4
assad
END
cas user 0 0 5 4 # 通過 gets 獲取的 cas 令牌設置 user
vancy
STORED
查找,刪除,更改指令
get key1 [ key2 key3 ...] | 獲取指定 key 的 value |
gets key1 [ key2 key3 ...] | 獲取指定 key 的 value,包括該 key 的 exptime,bytes,和一個 cas 值; |
del key1 [ key2 key3 ...] [noreply] | 刪除指定 key |
incr key increment_value decr key decrement_value | 對指定 key 儲存的 value執行自增,自減 操作,該 value 必須是十進制32位無符號數值; |
系統統計信息指令
stats | 輸出系統統計信息,詳細的信息列表說明如下 |
stats sizes | 顯示所有 items 的大小、個數 |
stats slabs | 顯示各個 slabs 信息,包括 chunk 的大小、數目、使用情況等 |
stats items | 顯示各個 slab 中 items 的數目和空閒時長 |
flush_all [time] [noreply] | 清除緩存中的所有鍵值,time 參數用於設置延遲執行時間,單位s |
- pid: memcache服務器進程ID
- uptime:服務器已運行秒數
- time:服務器當前Unix時間戳
- version:memcache版本
- pointer_size:操作系統指針大小
- rusage_user:進程累計用戶時間
- rusage_system:進程累計系統時間
- curr_connections:當前連接數量
- total_connections:Memcached運行以來連接總數
- connection_structures:Memcached分配的連接結構數量
- cmd_get:get命令請求次數
- cmd_set:set命令請求次數
- cmd_flush:flush命令請求次數
- get_hits:get命令命中次數
- get_misses:get命令未命中次數
- delete_misses:delete命令未命中次數
- delete_hits:delete命令命中次數
- incr_misses:incr命令未命中次數
- incr_hits:incr命令命中次數
- decr_misses:decr命令未命中次數
- decr_hits:decr命令命中次數
- cas_misses:cas命令未命中次數
- cas_hits:cas命令命中次數
- cas_badval:使用擦拭次數
- auth_cmds:認證命令處理的次數
- auth_errors:認證失敗數目
- bytes_read:讀取總字節數
- bytes_written:發送總字節數
- limit_maxbytes:分配的內存總大小(字節)
- accepting_conns:服務器是否達到過最大連接(0/1)
- listen_disabled_num:失效的監聽數
- threads:當前線程數
- conn_yields:連接操作主動放棄數目
- bytes:當前存儲佔用的字節數
- curr_items:當前存儲的數據總數
- total_items:啓動以來存儲的數據總數
- evictions:LRU釋放的對象數目
- reclaimed:已過期的數據條目來存儲新數據的數目