您好,登錄后才能下訂單哦!
博文大綱:
一、存儲常用的指令
1.set指令
2.add指令
3.replace指令
4.append指令
5.prepend指令
6.cas指令
二、常用的查找指令
1.get指令
2.gets指令
3.delete指令
4.incr指令
5.decr指令
6.stats指令
7.stats items指令
8.stats slabs指令
9.stats sizes指令
10.flush_all指令
常用的存儲數據的指令有:
- set 命令是保存一個叫做 key 的數據到服務器上;
- add 命令是添加一個數據到服務器,但是服務器必須保證這個 key 是不存在的,能夠保證數據不會被覆蓋;
- replace 命令是替換一個已經存在的數據,如果數據不存在,就是類似 set 功能;
上述指令的語法格式都是一樣的,只是指令不一樣而已,語法如下:
<命令> <鍵> <標記> <有效期> <數據長度>
各個參數含義如下:
- <命令>:就是add、set、replace等指令;
- <鍵> - key:就是保存在服務器上唯一的一個標識符,不可以與其他的key沖突,否則會覆蓋掉原來的數據(使用set命令的話),這個key是為了能夠準確的存取一個數據項目;
- <標記> - flag:標記的是一個16位的無符號整型數據,用來設置服務器跟客戶端一些交互的操作;
- <有效期> -expiration time:是數據在服務器上的有效期限,如果是0,則數據永遠有效,單位是秒,Memcached服務端會把一個數據的有效期設置為當前Unix時間+設置的有效時間;
- <數據長度> - bytes:數據的長度,block data數據塊的長度,一般這這個長度結束后下一行跟著block data數據內容,發送完數據以后,客戶端一般等待服務器端的返回;
set指令用于將數據值(value)存儲在指定的鍵(key)中,如果設置的鍵原本存在值,則會把原本的值覆蓋掉!
基本語法格式:
set key flags exptime bytes [noreply] value
參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節數;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set lzj 0 0 8
jianjian
STORED
輸出信息:
- STORED:保存成功;
- ERROR:保存失敗;
add 指令用于將 value(數據值) 存儲在指定的 key(鍵) 中,如果 add 的 key 已經存在,則不會更新數據(過期的 key 會更新)。
基本語法格式:
add key flags exptime bytes [noreply] value
參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節數;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);
示例:
以下實例中我們設置:
? key → key
? flag → 0
? exptime → 900 (以秒為單位)
? bytes → 3 (數據存儲的字節數)
? value → lzj
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
add key 0 900 3
lzj
STORED
輸出信息解釋:
- STORED:保存成功;
- ERROR:保存失敗;
replace指令用于替換已存在的 key(鍵) 的 value(數據值),如果 key 不存在,則替換失敗!
語法如下:
replace key flags exptime bytes [noreply] value
參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節數;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
add abc 0 900 3
123
STORED
replace abc 0 900 3
234
STORED
輸出信息解釋:
- STORED:保存成功;
- ERROR:保存失敗;
append指令用于向已存在 key(鍵) 的 value(數據值) 后面追加數據 !
語法如下:
append key flags exptime bytes [noreply] value
參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節數;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set new_key 0 0 3
new
STORED
append new_key 0 0 3
old
STORED
get new_key
VALUE new_key 0 6
newold
END
輸出信息說明:
? STORED:保存成功后輸出;
? NOT_STORED:該鍵在 Memcached 上不存在;
? CLIENT_ERROR:執行錯誤;
prepend指令用于向已存在 key( 鍵) ) 的 value( 數據值) ) 前面追加數據 ,與append正好相反!
語法如下:
prepend key flags exptime bytes [noreply] value
參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節數;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set q 0 0 3
qqq
STORED
prepend q 0 0 3
www
STORED
get q
VALUE q 0 6
wwwqqq
END
輸出信息說明:
? STORED:保存成功后輸出;
? NOT_STORED:該鍵在 Memcached 上不存在;
? CLIENT_ERROR:執行錯誤;
cas指令用于執行一個"檢查并設置"的操作它僅在當前客戶端最后一次取值后,該 key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。檢查是通過 cas_token 參數進行的, 這個參數是 Memcach 指定給已經存在的元素的一個唯一的 64 位值。
語法如下:
cas key flags exptime bytes unique_cas_token [noreply] value
參數說明如下:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節數;
? unique_cas_token 通過 gets 命令獲取的一個唯一的 64 位值;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);
要在 Memcached 上使用 CAS 命令,需要從 Memcached 服務商通過 gets 命令獲取令牌(token);
gets 命令的功能類似于基本的 get 命令。兩個命令之間的差異在于,gets 返回的信息稍微多一些:64 位的整型值非常像名稱/值對的 "版本" 標識符;
實例步驟如下:
? 如果沒有設置唯一令牌,則 CAS 命令執行錯誤;
? 如果鍵 key 不存在,執行失敗;
? 添加鍵值對;
? 通過 gets 命令獲取唯一令牌;
? 使用 cas 命令更新數據;
? 使用 get 命令查看數據是否更新;
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
cas tp 0 900 9
ERROR
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:保存成功后輸出。
? ERROR:保存出錯或語法錯誤。
? EXISTS:在最后一次取值后另外一個用戶也在更新該數據。
? NOT_FOUND:Memcached 服務上不存在該鍵值。
get指令獲取存儲在 key( 鍵) ) 中的 value( 數據值) ) ,如果 key 不存在,則返回空!
語法如下:
get key
多個 key 使用空格隔開,如下:
get key1 key2 key3
參數說明:
? key:鍵值 key-value 結構中的 key,用于查找緩存值;
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set lv 0 0 3
lzj
STORED
get lv
VALUE lv 0 3
lzj
END
gets指令獲取帶有 CAS 令牌存 的 value( 數據值) ) ,如果 key 不存在,則返回空!
語法如下:
gets key
多個 key 使用空格隔開,如下:
gets key1 key2 key3
參數說明:
? key:鍵值 key-value 結構中的 key,用于查找緩存值;
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set lv 0 0 3
aaa
STORED
gets lv
VALUE lv 0 3 13
aaa
END
//在 使用 gets 命令的輸出結果中,在最后一列的數字13代表了 key 為lv的 CAS 令牌
delete指令用于刪除已存在的 key(鍵)!
語法如下:
delete key [noreply]
參數說明如下:
? key:就是鍵的名稱;
? noreply(可選): 該參數告知服務器不需要返回數據;
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set qqq 0 0 3
aaa
STORED
delete qqq
DELETED
get qqq
END
輸出信息說明:
? DELETED:刪除成功;
? ERROR:語法錯誤或刪除失敗;
? NOT_FOUND:key 不存在;
incr指令用于對已存在的key(鍵)的數字值進行自增(必須是十進制的32位無符號整數)!
語法如下:
incr key increment_value
參數說明:
? key:鍵值 key-value 結構中的 key,用于查找緩存值;
? increment_value: 增加的數值;
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set vi 0 0 2
10
STORED
incr vi 10
20
get vi
VALUE vi 0 2
20
END
輸出信息說明:
? NOT_FOUND:key 不存在;
? CLIENT_ERROR:自增值不是對象;
? ERROR 其他錯誤,如語法錯誤等;
decr指令用于對已存在的key(鍵)的數字值進行自減(必須是十進制的32位無符號整數),與incr指令相反!
語法:
decr key decrement_value
參數說明:
? key:鍵值 key-value 結構中的 key,用于查找緩存值;
? decrement_value: 減少的數值;
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set vim 0 0 2
10
STORED
decr vim 5
5
get vim
VALUE vim 0 2
5
END
輸出信息說明:
? NOT_FOUND:key 不存在;
? CLIENT_ERROR:自增值不是對象;
? ERROR 其他錯誤,如語法錯誤等;
stats指令用于返回統計信息例如 PID(進程號)、版本號、連接數等。
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
stats
STAT pid 10527
STAT uptime 4152
STAT time 1576506974
STAT version 1.4.33
STAT libevent 2.0.22-stable
STAT pointer_size 64
STAT rusage_user 1.118058
STAT rusage_system 0.698786
STAT curr_connections 5
STAT total_connections 21
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 7
STAT cmd_set 19
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 6
STAT get_misses 1
STAT get_expired 0
STAT get_flushed 0
STAT delete_misses 1
STAT delete_hits 1
STAT incr_misses 0
STAT incr_hits 1
STAT decr_misses 0
STAT decr_hits 1
STAT cas_misses 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 815
STAT bytes_written 459
STAT limit_maxbytes 2147483648
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT log_worker_dropped 0
STAT log_worker_written 0
STAT log_watcher_skipped 0
STAT log_watcher_sent 0
STAT bytes 648
STAT curr_items 9
STAT total_items 18
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
參數解釋:
? 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_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指令用于顯示各個 slab 中 item 的數目和存儲時長(最后一次訪問距離現在的秒數);
語法如下:
stats items
!
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
stats items
STAT items:1:number 9
STAT items:1:age 3615
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:crawler_reclaimed 0
STAT items:1:crawler_items_checked 0
STAT items:1:lrutail_reflocked 0
END
stats slabs指令用于顯示各個 slab 的信息,包括 chunk 的大小、數目、使用情況等!
語法如下:
stats slabs
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 9
STAT 1:free_chunks 10913
STAT 1:free_chunks_end 0
STAT 1:mem_requested 648
STAT 1:get_hits 6
STAT 1:cmd_set 19
STAT 1:delete_hits 1
STAT 1:incr_hits 1
STAT 1:decr_hits 1
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END
Memcached stats sizes 命令用于顯示所有 item 的大小和個數,該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數!
語法如下:
stats sizes
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
stats sizes STAT 96 1 END
STAT sizes_status disabled
END
flush_all 命令用于用于清理緩存中的所有 key=>value( 鍵 => 值) ) 對,該命令提供了一個可選參數 time,用于在指定的時間后執行清理緩存操作。
語法:
flush_all [time] [noreply]
示例:
[root@localhost ~]# telnet 192.168.1.10 11211
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
set lv 0 0 3
qwe
STORED
flush_all
OK
get lv
END
—————————本文到此結束,感謝閱讀—————————
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。