Memcached 常用指令
- 2020 年 2 月 15 日
- 筆記
一、常用的存儲數據的三個指令
主要的三個存儲數據的指令分別是:set、add、replace。
- set指令:是直接保存到一個叫做key的數據到服務器上(不管這個數據是否存在);
- add指令:是添加一個數據到memcached,如果這個key已存在,則不進行添加,若不存在,則執行添加;
- replace指令:也是添加一個數據到memcached,但其與add指令相反,如果這個key存在,那麼就修改其key值,如果不存在,則返回錯誤,不進行任何操作;
上述三個指令的語法格式都是一樣的,只是指令不一樣而已,其指令的語法格式如下:
<命令> <鍵> <標記> <有效期> <數據長度>
在上述的語法格式中,解釋如下:
- <命令>:就是add、set、replace等指令;
- <鍵> – key:就是保存在服務器上唯一的一個標識符,不可以與其他的key衝突,否則會覆蓋掉原來的數據(使用set命令的話),這個key是為了能夠準確的存取一個數據項目;
- <標記> – flag:標記的是一個16位的無符號整型數據,用來設置服務器跟客戶端一些交互的操作;
- <有效期> -expiration time:是數據在服務器上的有效期限,如果是0,則數據永遠有效,單位是秒,Memcached服務端會把一個數據的有效期設置為當前Unix時間+設置的有效時間;
- <數據長度> – bytes:數據的長度,block data數據塊的長度,一般這這個長度結束後下一行跟着block data數據內容,發送完數據以後,客戶端一般等待服務器端的返回;
1、set指令使用示例
[root@memcache1 ~]# telnet 192.168.171.132 11211 #連接到memcached數據庫 set lisi 0 0 3 3 #插入一個數據 aaa #插入的數據為aaa STORED #返回「STORED」則表示插入成功 get lisi #查詢插入的數據 VALUE lisi 0 3 aaa END set lisi 0 0 4 #修改「lisi」這個key的值為bbbb bbbb STORED get lisi #再次查看,確定更改成功 VALUE lisi 0 4 bbbb
2、add指令使用示例
以下實例中我們設置: • key → new_key • flag → 0 • exptime → 900 (以秒為單位) • bytes → 10 (數據存儲的位元組數) • value → data_value
add new_key 0 900 10 data_value STORED get new_key VALUE new_key 0 10 data_value END
輸出 如果數據添加成功,則輸出: STORED
輸出信息說明: • STORED:保存成功後輸出。 • NOT_STORED :在保持失敗後輸出。
3、replace 命令 Memcached replace 命令用於替換已存在的 key( 鍵) ) 的 value( 數據值) )。 如果 key 不存在,則替換失敗,並且將獲得響應 NOT_STORED。
replace 命令的基本語法格式如下: replace key flags exptime bytes [noreply] value
參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 • flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。 • exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠) • bytes:在緩存中存儲的位元組數 • noreply(可選): 該參數告知服務器不需要返回數據 • value:存儲的值(始終位於第二行)(可直接理解為 key-value 結構中的 value)
使用實例
以下實例中將設置: • key → mykey • flag → 0 • exptime → 900 (以秒為單位) • bytes → 10 (數據存儲的位元組數) • value → data_value
以下實例中我們使用的鍵位 'mykey' 並存儲對應的值 data_value。執行後我們替換相同的 key 的值為'some_other_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
如果數據添加成功,則輸出: STORED 輸出信息說明: • STORED:保存成功後輸出。 • NOT_STORED:執行替換失敗後輸出。~~~~
4、append 命令 append 命令用於向已存在 key( 鍵) ) 的 value( 數據值) ) 後面追加數據 。 語法: append 命令的基本語法格式如下: append key flags exptime bytes [noreply] value
參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 • flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。 • exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠) • bytes:在緩存中存儲的位元組數 • noreply(可選): 該參數告知服務器不需要返回數據 • value:存儲的值(始終位於第二行)(可直接理解為 key-value 結構中的 value) . 實例如下: • 首先我們在 Memcached 中存儲一個鍵 runoob,其值為 memcached。 • 然後,我們使用 get 命令檢索該值。 • 然後,我們使用 append 命令在鍵為 runoob 的值後面追加 "redis"。 • 最後,我們再使用 get 命令檢索該值。
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
輸出 如果數據添加成功,則輸出: STORED
輸出信息說明: • STORED:保存成功後輸出。 • NOT_STORED:該鍵在 Memcached 上不存在。 • CLIENT_ERROR:執行錯誤。
5、prepend 命令 prepend 命令用於向已存在 key( 鍵) ) 的 value( 數據值) ) 前面追加數據 ,與append正好相反。 語法: prepend 命令的基本語法格式如下: prepend key flags exptime bytes [noreply] value
參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 • flags:可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 。 • exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠) • bytes:在緩存中存儲的位元組數 • noreply(可選): 該參數告知服務器不需要返回數據 • value:存儲的值(始終位於第二行)(可直接理解為 key-value 結構中的 value)
實例如下: • 首先我們在 Memcached 中存儲一個鍵 runoob,其值為 memcached。 • 然後,我們使用 get 命令檢索該值。 • 然後,我們使用 prepend 命令在鍵為 runoob 的值後面追加 "redis"。 • 最後,我們再使用 get 命令檢索該值。
set runoob 0 900 9
> memcached > STORED > get runoob > VALUE runoob 0 14 > memcached > END > prepend runoob 0 900 5 > redis > STORED > get runoob > VALUE runoob 0 14 > redismemcached END
如果數據添加成功,則輸出: STORED 輸出信息說明: • STORED:保存成功後輸出。 • NOT_STORED:該鍵在 Memcached 上不存在。 • CLIENT_ERROR:執行錯誤。 6、cas命令 CAS(Check-And-Set 或 Compare-And-Swap) 命令用於執行一個"檢查並設置"的操作它僅在當前客戶端最後一次取值後,該 key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。檢查是通過 cas_token 參數進行的, 這個參數是 Memcach 指定給已經存在的元素的一個唯一的 64 位值。
CAS 命令的基本語法格式如下: 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 命令執行錯誤。 • 如果鍵 key 不存在,執行失敗。 • 添加鍵值對。 • 通過 gets 命令獲取唯一令牌。 • 使用 cas 命令更新數據 • 使用 get 命令查看數據是否更新
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 輸出 如果數據添加成功,則輸出: STORED 輸出信息說明: • STORED:保存成功後輸出。 • ERROR:保存出錯或語法錯誤。 • EXISTS:在最後一次取值後另外一個用戶也在更新該數據。 • NOT_FOUND:Memcached 服務上不存在該鍵值。
. 二、常用的查找命令 1、 get命令 get 命令獲取存儲在 key( 鍵) ) 中的 value( 數據值) ) ,如果 key 不存在,則返回空。
get 命令的基本語法格式如下: get key
多個 key 使用空格隔開,如下: get key1 key2 key3 參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 實例 在以下實例中,我們使用 runoob 作為 key,過期時間設置為 900 秒。
set runoob 0 900 9 memcached STORED get runoob VALUE runoob 0 9 memcached END
2、 gets 命令 gets 命令獲取帶有 CAS 令牌存 的 value( 數據值) ) ,如果 key 不存在,則返回空。
gets 命令的基本語法格式如下: gets key 多個 key 使用空格隔開,如下: gets key1 key2 key3 參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 實例 在以下實例中,我們使用 runoob 作為 key,過期時間設置為 900 秒。
set runoob 0 900 9 memcached STORED gets runoob VALUE runoob 0 9 1 memcached END
在 使用 gets 命令的輸出結果中,在最後一列的數字 1 代表了 key 為 runoob 的 CAS 令牌。
3、delete 命令 delete 命令用於刪除已存在的 key(鍵)。
delete 命令的基本語法格式如下: delete key [noreply]
參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 • noreply(可選): 該參數告知服務器不需要返回數據
實例 在以下實例中,我們使用 runoob 作為 key,過期時間設置為 900 秒。之後我們使用 delete 命令刪除該 key。
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
輸出信息說明: • DELETED:刪除成功。 • ERROR:語法錯誤或刪除失敗。 • NOT_FOUND:key 不存在。
4、 incr 與 decr 命令 incr 與 decr 命令用於對已存在的 key(鍵) 的數字值進行自增或自減操作。 incr 與 decr 命令操作的數據必須是十進制的 32 位無符號整數。 如果 key 不存在返回 NOT_FOUND,如果鍵的值不為數字,則返回 CLIENT_ERROR,其他錯誤返回 ERROR。 incr 命令
incr 命令的基本語法格式如下: incr key increment_value
參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 • increment_value: 增加的數值。 實例 在以下實例中,我們使用 visitors 作為 key,初始值為 10,之後進行加 5 操作。 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 輸出信息說明: • NOT_FOUND:key 不存在。 • CLIENT_ERROR:自增值不是對象。 • ERROR 其他錯誤,如語法錯誤等。
decr 命令的基本語法格式如下: decr key decrement_value
參數說明如下: • key:鍵值 key-value 結構中的 key,用於查找緩存值。 • decrement_value: 減少的數值。 實例 set visitors 0 900 2 10 STORED get visitors VALUE visitors 0 2 10 END decr visitors 5 5 get visitors VALUE visitors 0 1 5 END 輸出信息說明: • NOT_FOUND:key 不存在。 • CLIENT_ERROR:自增值不是對象。 • ERROR 其他錯誤,如語法錯誤等。
5、 stats 命令 stats 命令用於返回統計信息例如 PID(進程號)、版本號、連接數等。
stats 命令的基本語法格式如下: stats 實例 在以下實例中,我們使用了 stats 命令來輸出 Memcached 服務信息。 stats
這裡顯示了很多狀態信息,下邊詳細解釋每個狀態項: • 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:已過期的數據條目來存儲新數據的數目
6、stats items 命令 stats items 命令用於顯示各個 slab 中 item 的數目和存儲時長(最後一次訪問距離現在的秒數)。
stats items 命令的基本語法格式如下: stats items 7、stats slabs 命令 stats slabs 命令用於顯示各個 slab 的信息,包括 chunk 的大小、數目、使用情況等。
stats slabs 命令的基本語法格式如下: stats slabs 8、 stats sizes 命令 Memcached stats sizes 命令用於顯示所有 item 的大小和個數。 該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數。
stats sizes 命令的基本語法格式如下: stats sizes 實例 stats sizes STAT 96 1 END 9、 flush_all 命令 flush_all 命令用於用於清理緩存中的所有 key=>value( 鍵 => 值) ) 對。 該命令提供了一個可選參數 time,用於在指定的時間後執行清理緩存操作。
flush_all 命令的基本語法格式如下: 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