溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Memcached常用指令

發(fā)布時間:2020-07-13 03:47:12 來源:網絡 閱讀:491 作者:筱振 欄目:系統(tǒng)運維

博文大綱:
一、存儲常用的指令
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數據內容,發(fā)送完數據以后,客戶端一般等待服務器端的返回;

1.set指令

set指令用于將數據值(value)存儲在指定的鍵(key)中,如果設置的鍵原本存在值,則會把原本的值覆蓋掉!

基本語法格式:

set key flags exptime bytes [noreply] value

參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節(jié)數;
? 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:保存失??;

2.add指令

add 指令用于將 value(數據值) 存儲在指定的 key(鍵) 中,如果 add 的 key 已經存在,則不會更新數據(過期的 key 會更新)。

基本語法格式:

add key flags exptime bytes [noreply] value

參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節(jié)數;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);

示例:

以下實例中我們設置:
? key → key
? flag → 0
? exptime → 900 (以秒為單位)
? bytes → 3 (數據存儲的字節(jié)數)
? 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:保存失??;

3.replace指令

replace指令用于替換已存在的 key(鍵) 的 value(數據值),如果 key 不存在,則替換失??!

語法如下:

replace key flags exptime bytes [noreply] value

參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節(jié)數;
? 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:保存失??;

4.append指令

append指令用于向已存在 key(鍵) 的 value(數據值) 后面追加數據 !

語法如下:

append key flags exptime bytes [noreply] value

參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節(jié)數;
? 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:執(zhí)行錯誤;

5.prepend指令

prepend指令用于向已存在 key( 鍵) ) 的 value( 數據值) ) 前面追加數據 ,與append正好相反!

語法如下:

prepend key flags exptime bytes [noreply] value 

參數說明:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節(jié)數;
? 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:執(zhí)行錯誤;

6.cas指令

cas指令用于執(zhí)行一個"檢查并設置"的操作它僅在當前客戶端最后一次取值后,該 key 對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。檢查是通過 cas_token 參數進行的, 這個參數是 Memcach 指定給已經存在的元素的一個唯一的 64 位值。

語法如下:

cas key flags exptime bytes unique_cas_token [noreply] value 

參數說明如下:
? key:就是鍵的名稱;
? flags:可以包括鍵值對的整型參數,可以理解為鍵的標記;
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠);
? bytes:在緩存中存儲的字節(jié)數;
? unique_cas_token 通過 gets 命令獲取的一個唯一的 64 位值;
? noreply(可選): 該參數告知服務器不需要返回數據;
? value:存儲的值(始終位于第二行);

要在 Memcached 上使用 CAS 命令,需要從 Memcached 服務商通過 gets 命令獲取令牌(token);
gets 命令的功能類似于基本的 get 命令。兩個命令之間的差異在于,gets 返回的信息稍微多一些:64 位的整型值非常像名稱/值對的 "版本" 標識符;

實例步驟如下:
? 如果沒有設置唯一令牌,則 CAS 命令執(zhí)行錯誤;
? 如果鍵 key 不存在,執(zhí)行失?。?br/>? 添加鍵值對;
? 通過 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 服務上不存在該鍵值。

二、常用的查找指令

1.get指令

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

2.gets指令

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 令牌

3.delete指令

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:語法錯誤或刪除失?。?br/>? NOT_FOUND:key 不存在;

4.incr指令

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 其他錯誤,如語法錯誤等;

5.decr指令

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 其他錯誤,如語法錯誤等;

6.stats指令

stats指令用于返回統(tǒng)計信息例如 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:操作系統(tǒng)指針大?。?br/>? rusage_user:進程累計用戶時間;
? rusage_system:進程累計系統(tǒng)時間;
? 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:讀取總字節(jié)數;
? bytes_written:發(fā)送總字節(jié)數;
? limit_maxbytes:分配的內存總大?。ㄗ止?jié));
? accepting_conns:服務器是否達到過最大連接(0/1);
? listen_disabled_num:失效的監(jiān)聽數;
? threads:當前線程數;
? conn_yields:連接操作主動放棄數目;
? bytes:當前存儲占用的字節(jié)數;
? curr_items:當前存儲的數據總數;
? total_items:啟動以來存儲的數據總數;
? evictions:LRU 釋放的對象數目;
? reclaimed:已過期的數據條目來存儲新數據的數目;

7.stats items指令

stats items指令用于顯示各個 slab 中 item 的數目和存儲時長(最后一次訪問距離現(xiàn)在的秒數);

語法如下:

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

8.stats slabs指令

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

9.stats sizes指令

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

10.flush_all指令

flush_all 命令用于用于清理緩存中的所有 key=>value( 鍵 => 值) ) 對,該命令提供了一個可選參數 time,用于在指定的時間后執(zhí)行清理緩存操作。

語法:

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

—————————本文到此結束,感謝閱讀—————————

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI