1、經常使用的存儲數據的三個指令redis
主要的三個存儲數據的指令分別是:set、add、replace。數據庫
- set指令:是直接保存到一個叫作key的數據到服務器上(無論這個數據是否存在);
- add指令:是添加一個數據到memcached,若是這個key已存在,則不進行添加,若不存在,則執行添加;
- replace指令:也是添加一個數據到memcached,但其與add指令相反,若是這個key存在,那麼就修改其key值,若是不存在,則返回錯誤,不進行任何操做;
上述三個指令的語法格式都是同樣的,只是指令不同而已,其指令的語法格式以下:緩存
<命令> <鍵> <標記> <有效期> <數據長度>服務器
在上述的語法格式中,解釋以下:app
- <命令>:就是add、set、replace等指令;
- <鍵> - key:就是保存在服務器上惟一的一個標識符,不能夠與其餘的key衝突,不然會覆蓋掉原來的數據(使用set命令的話),這個key是爲了可以準確的存取一個數據項目;
- <標記> - flag:標記的是一個16位的無符號整型數據,用來設置服務器跟客戶端一些交互的操做;
- <有效期> -expiration time:是數據在服務器上的有效期限,若是是0,則數據永遠有效,單位是秒,Memcached服務端會把一個數據的有效期設置爲當前Unix時間+設置的有效時間;
- <數據長度> - bytes:數據的長度,block data數據塊的長度,通常這這個長度結束後下一行跟着block data數據內容,發送完數據之後,客戶端通常等待服務器端的返回;
一、set指令使用示例ide
[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
二、add指令使用示例memcached
如下實例中咱們設置:
• 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 :在保持失敗後輸出。指針
三、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:執行替換失敗後輸出。~~~~
四、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:執行錯誤。
五、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:執行錯誤。
六、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 服務上不存在該鍵值。
.
2、經常使用的查找命令
一、 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
二、 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 令牌。
三、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 不存在。
四、 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 其餘錯誤,如語法錯誤等。
五、 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:已過時的數據條目來存儲新數據的數目
六、stats items 命令
stats items 命令用於顯示各個 slab 中 item 的數目和存儲時長(最後一次訪問距離如今的秒數)。
stats items 命令的基本語法格式以下:
stats items
七、stats slabs 命令
stats slabs 命令用於顯示各個 slab 的信息,包括 chunk 的大小、數目、使用狀況等。
stats slabs 命令的基本語法格式以下:
stats slabs
八、 stats sizes 命令
Memcached stats sizes 命令用於顯示全部 item 的大小和個數。
該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數。
stats sizes 命令的基本語法格式以下:
stats sizes
實例
stats sizes STAT 96 1 END
九、 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