1. Memcached簡介
Memcached是一個自由開源的,高性能,分佈式內存對象緩存系統。
Memcached是一種基於內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。
本質上,它是一個簡潔的key-value存儲系統。
一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
2. Memcached安裝配置
//注意:路徑對應修改爲自己的安裝路徑
//安裝和卸載memcached服務
c:\memcached\memcached.exe -d install
c:\memcached\memcached.exe -d uninstall
//啓動和關閉memcached服務
c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
//-m 512 意思是設置 memcached 最大的緩存配置爲512M。
c:\memcached\memcached.exe -d runservice -m 512
//該命令可以用來查看命令幫助和參數配置
c:\memcached\memcached.exe -h
3. Memcached 連接
//執行任何命令時需要先啓動memcached服務(路徑對應修改爲自己的安裝路徑)
c:\memcached\memcached.exe -d start
//telnet HOST PORT --------- HOST:主機名 PORT:端口
telnet 127.0.0.1 11211
4. Memcached 存儲命令
1. set命令
//語法
set key flags exptime bytes [noreply]
value
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息。
exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes:在緩存中存儲的字節數
noreply(可選): 該參數告知服務器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解爲key-value結構中的value)
例子:
set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
說明:
key → runoob
flag → 0
exptime → 900 (以秒爲單位)
bytes → 9 (數據存儲的字節數)
value → memcached
輸出:
//數據設置成功
STORED
輸出信息說明:
STORED:保存成功後輸出。
ERROR:在保持失敗後輸出。
2. add命令
//語法
add key flags exptime bytes [noreply]
value
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息。
exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes:在緩存中存儲的字節數
noreply(可選): 該參數告知服務器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解爲key-value結構中的value)
例子:
add new_key 0 900 10
data_value
STORED
get new_key
VALUE new_key 0 10
data_value
END
說明:
key → new_key
flag → 0
exptime → 900 (以秒爲單位)
bytes → 10 (數據存儲的字節數)
value → data_value
輸出:
//數據設置成功
STORED
輸出信息說明:
STORED:保存成功後輸出。
NOT_STORED :在保持失敗後輸出。
3. replace命令
//語法
replace key flags exptime bytes [noreply]
value
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息。
exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes:在緩存中存儲的字節數
noreply(可選): 該參數告知服務器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解爲key-value結構中的value)
例子:
add mykey 0 900 10
data_value
STORED
get mykey
VALUE mykey 0 10
data_value
END
replace mykey 0 900 16
some_other_value
get mykey
VALUE mykey 0 16
some_other_value
END
說明:
key → mykey
flag → 0
exptime → 900 (以秒爲單位)
bytes → 10 (數據存儲的字節數)
value → data_value
輸出:
//數據設置成功
STORED
輸出信息說明:
STORED:保存成功後輸出。
NOT_STORED :在保持失敗後輸出。
4. append命令(prepend在鍵值的前面追加數據)
//語法
append key flags exptime bytes [noreply]
value
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息。
exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes:在緩存中存儲的字節數
noreply(可選): 該參數告知服務器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解爲key-value結構中的value)
例子:
set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
append runoob 0 900 5
redis
STORED
get runoob
VALUE runoob 0 14
memcachedredis
END
說明:
首先我們在 Memcached 中存儲一個鍵 runoob,其值爲 memcached。
然後,我們使用 get 命令檢索該值。
然後,我們使用 append 命令在鍵爲 runoob 的值後面追加 “redis”。
最後,我們再使用 get 命令檢索該值。
輸出:
//數據設置成功
STORED
輸出信息說明:
STORED:保存成功後輸出。
NOT_STORED:該鍵在 Memcached 上不存在。
CLIENT_ERROR:執行錯誤。
5. CAS命令
說明:Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用於執行一個”檢查並設置”的操作
它僅在當前客戶端最後一次取值後,該key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。
檢查是通過cas_token參數進行的,這個參數是Memcach指定給已經存在的元素的一個唯一的64位值。
//語法
cas key flags exptime bytes unique_cas_token [noreply]
value
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息。
exptime:在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)
bytes:在緩存中存儲的字節數
unique_cas_token通過 gets 命令獲取的一個唯一的64位值。
noreply(可選): 該參數告知服務器不需要返回數據
value:存儲的值(始終位於第二行)(可直接理解爲key-value結構中的value)
例子:
要在 Memcached 上使用 CAS 命令,你需要從 Memcached 服務商通過 gets 命令獲取令牌(token)。
gets 命令的功能類似於基本的 get 命令。兩個命令之間的差異在於,gets 返回的信息稍微多一些:64 位的整型值非常像名稱/值對的 “版本” 標識符。
cas tp 0 900 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
說明:
如果沒有設置唯一令牌,則 CAS 命令執行錯誤。
如果鍵 key 不存在,執行失敗。
添加鍵值對。
通過 gets 命令獲取唯一令牌。
使用 cas 命令更新數據。
使用 get 命令查看數據是否更新。
輸出:
//數據設置成功
STORED
輸出信息說明:
STORED:保存成功後輸出。
ERROR:保存出錯或語法錯誤。
EXISTS:在最後一次取值後另外一個用戶也在更新該數據。
NOT_FOUND:Memcached 服務上不存在該鍵值。
5. Memcached 查找命令
1. get命令
說明:Memcached get 命令獲取存儲在 key(鍵) 中的 value(數據值) ,如果 key 不存在,則返回空。
//語法
get key
//多個 key 使用空格隔開
get key1 key2 key3
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
例子:
set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
說明:
使用 runoob 作爲 key,過期時間設置爲 900 秒。
2. gets命令
Memcached gets 命令獲取帶有 CAS 令牌存 的 value(數據值) ,如果 key 不存在,則返回空。
//語法
get key
//多個 key 使用空格隔開
get key1 key2 key3
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
例子:
set runoob 0 900 9
memcached
STORED
gets runoob
VALUE runoob 0 9 1
memcached
END
說明:
在使用gets命令的輸出結果中,在最後一列的數字1代表了key爲runoob的CAS令牌。
3. delete命令
Memcached delete 命令用於刪除已存在的 key(鍵)。
//語法
delete key [noreply]
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
noreply(可選): 該參數告知服務器不需要返回數據。
例子:
set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
delete runoob
DELETED
get runoob
END
delete runoob
NOT_FOUND
說明:
使用runoob作爲key,過期時間設置爲900秒。之後我們使用delete命令刪除該key。
輸出信息說明:
DELETED:刪除成功。
ERROR:語法錯誤或刪除失敗。
NOT_FOUND:key不存在。
3. incr / decr 命令
Memcached incr 與 decr 命令用於對已存在的 key(鍵) 的數字值進行自增或自減操作。
incr與decr命令操作的數據必須是十進制的32位無符號整數。
如果key不存在返回NOT_FOUND,如果鍵的值不爲數字,則返回 CLIENT_ERROR,其他錯誤返回 ERROR。
//語法
incr key increment_value
參數說明:
key:鍵值 key-value 結構中的 key,用於查找緩存值。
increment_value: 增加的數值。
例子:
set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
incr visitors 5
15
get visitors
VALUE visitors 0 2
15
END
說明:
使用 visitors 作爲 key,初始值爲 10,之後進行加 5 操作。
輸出信息說明:
NOT_FOUND:key 不存在。
CLIENT_ERROR:自增值不是對象。
ERROR其他錯誤,如語法錯誤等。
decr命令與此類似
6. Memcached 統計命令
1. Memcached stats 命令
說明:Memcached stats 命令用於返回統計信息例如 PID(進程號)、版本號、連接數等。
//語法
stats
2. Memcached stats items命令
說明:Memcached stats items 命令用於顯示各個slab中 item的數目和存儲時長(最後一次訪問距離現在的秒數)。
//語法
stats items
3. Memcached stats slabs命令
說明:Memcached stats slabs 命令用於顯示各個slab的信息,包括chunk的大小、數目、使用情況等。
//語法
stats slabs
- Memcached stats sizes命令
說明:Memcached stats sizes 命令用於顯示所有item的大小和個數。該信息返回兩列,第一列是item的大小,第二列是item的個數。
//語法
stats sizes
例子:
stats sizes
STAT 96 1
END
4. Memcached flush_all 命令
說明:Memcached flush_all 命令用於用於清理緩存中的所有 key=>value(鍵=>值) 對。
該命令提供了一個可選參數 time,用於在制定的時間後執行清理緩存操作。
//語法
flush_all [time] [noreply]
例子:
set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
flush_all
OK
get runoob
END