一、常用的存儲數(shù)據(jù)的三個指令
創(chuàng)新互聯(lián)公司技術(shù)團隊十余年來致力于為客戶提供成都網(wǎng)站制作、做網(wǎng)站、高端網(wǎng)站設(shè)計、網(wǎng)絡營銷推廣、搜索引擎SEO優(yōu)化等服務。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗豐富的技術(shù)團隊,先后服務、推廣了成百上千家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機構(gòu)單位。
主要的三個存儲數(shù)據(jù)的指令分別是:set、add、replace。
- set指令:是直接保存到一個叫做key的數(shù)據(jù)到服務器上(不管這個數(shù)據(jù)是否存在);
- add指令:是添加一個數(shù)據(jù)到memcached,如果這個key已存在,則不進行添加,若不存在,則執(zhí)行添加;
- replace指令:也是添加一個數(shù)據(jù)到memcached,但其與add指令相反,如果這個key存在,那么就修改其key值,如果不存在,則返回錯誤,不進行任何操作;
上述三個指令的語法格式都是一樣的,只是指令不一樣而已,其指令的語法格式如下:
<命令> <鍵> <標記> <有效期> <數(shù)據(jù)長度>
在上述的語法格式中,解釋如下:
- <命令>:就是add、set、replace等指令;
- <鍵> - key:就是保存在服務器上唯一的一個標識符,不可以與其他的key沖突,否則會覆蓋掉原來的數(shù)據(jù)(使用set命令的話),這個key是為了能夠準確的存取一個數(shù)據(jù)項目;
- <標記> - flag:標記的是一個16位的無符號整型數(shù)據(jù),用來設(shè)置服務器跟客戶端一些交互的操作;
- <有效期> -expiration time:是數(shù)據(jù)在服務器上的有效期限,如果是0,則數(shù)據(jù)永遠有效,單位是秒,Memcached服務端會把一個數(shù)據(jù)的有效期設(shè)置為當前Unix時間+設(shè)置的有效時間;
- <數(shù)據(jù)長度> - bytes:數(shù)據(jù)的長度,block data數(shù)據(jù)塊的長度,一般這這個長度結(jié)束后下一行跟著block data數(shù)據(jù)內(nèi)容,發(fā)送完數(shù)據(jù)以后,客戶端一般等待服務器端的返回;
1、set指令使用示例
[root@memcache1 ~]# telnet 192.168.171.132 11211 #連接到memcached數(shù)據(jù)庫
set lisi 0 0 3 3 #插入一個數(shù)據(jù)
aaa #插入的數(shù)據(jù)為aaa
STORED #返回“STORED”則表示插入成功
get lisi #查詢插入的數(shù)據(jù)
VALUE lisi 0 3
aaa
END
set lisi 0 0 4 #修改“l(fā)isi”這個key的值為bbbb
bbbb
STORED
get lisi #再次查看,確定更改成功
VALUE lisi 0 4
bbbb
2、add指令使用示例
以下實例中我們設(shè)置:
? key → new_key
? flag → 0
? exptime → 900 (以秒為單位)
? bytes → 10 (數(shù)據(jù)存儲的字節(jié)數(shù))
? value → data_value
add new_key 0 900 10
data_value
STORED
get new_key
VALUE new_key 0 10
data_value
END
輸出
如果數(shù)據(jù)添加成功,則輸出:
STORED
輸出信息說明:
? STORED:保存成功后輸出。
? NOT_STORED :在保持失敗后輸出。
3、replace 命令
Memcached replace 命令用于替換已存在的 key( 鍵) ) 的 value( 數(shù)據(jù)值) )。
如果 key 不存在,則替換失敗,并且將獲得響應 NOT_STORED。
replace 命令的基本語法格式如下:
replace key flags exptime bytes [noreply] value
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? flags:可以包括鍵值對的整型參數(shù),客戶機使用它存儲關(guān)于鍵值對的額外信息 。
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)
? bytes:在緩存中存儲的字節(jié)數(shù)
? noreply(可選): 該參數(shù)告知服務器不需要返回數(shù)據(jù)
? value:存儲的值(始終位于第二行)(可直接理解為 key-value 結(jié)構(gòu)中的 value)
使用實例
以下實例中將設(shè)置:
? key → mykey
? flag → 0
? exptime → 900 (以秒為單位)
? bytes → 10 (數(shù)據(jù)存儲的字節(jié)數(shù))
? value → data_value
以下實例中我們使用的鍵位 'mykey' 并存儲對應的值 data_value。執(zhí)行后我們替換相同的 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
如果數(shù)據(jù)添加成功,則輸出:
STORED
輸出信息說明:
? STORED:保存成功后輸出。
? NOT_STORED:執(zhí)行替換失敗后輸出。~~~~
4、append 命令
append 命令用于向已存在 key( 鍵) ) 的 value( 數(shù)據(jù)值) ) 后面追加數(shù)據(jù) 。
語法:
append 命令的基本語法格式如下:
append key flags exptime bytes [noreply] value
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? flags:可以包括鍵值對的整型參數(shù),客戶機使用它存儲關(guān)于鍵值對的額外信息 。
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)
? bytes:在緩存中存儲的字節(jié)數(shù)
? noreply(可選): 該參數(shù)告知服務器不需要返回數(shù)據(jù)
? value:存儲的值(始終位于第二行)(可直接理解為 key-value 結(jié)構(gòu)中的 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
輸出
如果數(shù)據(jù)添加成功,則輸出:
STORED
輸出信息說明:
? STORED:保存成功后輸出。
? NOT_STORED:該鍵在 Memcached 上不存在。
? CLIENT_ERROR:執(zhí)行錯誤。
5、prepend 命令
prepend 命令用于向已存在 key( 鍵) ) 的 value( 數(shù)據(jù)值) ) 前面追加數(shù)據(jù) ,與append正好相反。
語法:
prepend 命令的基本語法格式如下:
prepend key flags exptime bytes [noreply] value
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? flags:可以包括鍵值對的整型參數(shù),客戶機使用它存儲關(guān)于鍵值對的額外信息 。
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)
? bytes:在緩存中存儲的字節(jié)數(shù)
? noreply(可選): 該參數(shù)告知服務器不需要返回數(shù)據(jù)
? value:存儲的值(始終位于第二行)(可直接理解為 key-value 結(jié)構(gòu)中的 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
如果數(shù)據(jù)添加成功,則輸出:
STORED
輸出信息說明:
? STORED:保存成功后輸出。
? NOT_STORED:該鍵在 Memcached 上不存在。
? CLIENT_ERROR:執(zhí)行錯誤。
6、cas命令
CAS(Check-And-Set 或 Compare-And-Swap) 命令用于執(zhí)行一個"檢查并設(shè)置"的操作它僅在當前客戶端最后一次取值后,該 key 對應的值沒有被其他客戶端修改的情況下, 才能夠?qū)⒅祵懭?。檢查是通過 cas_token 參數(shù)進行的, 這個參數(shù)是 Memcach 指定給已經(jīng)存在的元素的一個唯一的 64 位值。
CAS 命令的基本語法格式如下:
cas key flags exptime bytes unique_cas_token [noreply] value
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? flags:可以包括鍵值對的整型參數(shù),客戶機使用它存儲關(guān)于鍵值對的額外信息 。
? exptime:在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠)
? bytes:在緩存中存儲的字節(jié)數(shù)
? unique_cas_token 通過 gets 命令獲取的一個唯一的 64 位值。
? noreply(可選): 該參數(shù)告知服務器不需要返回數(shù)據(jù)
? value:存儲的值(始終位于第二行)(可直接理解為 key-value 結(jié)構(gòu)中的 value)
要在 Memcached 上使用 CAS 命令,需要從 Memcached 服務商通過 gets 命令獲取令牌(token)。
gets 命令的功能類似于基本的 get 命令。兩個命令之間的差異在于,gets 返回的信息稍微多一些:64 位的整型值非常像名稱/值對的 "版本" 標識符。
實例步驟如下:
? 如果沒有設(shè)置唯一令牌,則 CAS 命令執(zhí)行錯誤。
? 如果鍵 key 不存在,執(zhí)行失敗。
? 添加鍵值對。
? 通過 gets 命令獲取唯一令牌。
? 使用 cas 命令更新數(shù)據(jù)
? 使用 get 命令查看數(shù)據(jù)是否更新
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
輸出
如果數(shù)據(jù)添加成功,則輸出:
STORED
輸出信息說明:
? STORED:保存成功后輸出。
? ERROR:保存出錯或語法錯誤。
? EXISTS:在最后一次取值后另外一個用戶也在更新該數(shù)據(jù)。
? NOT_FOUND:Memcached 服務上不存在該鍵值。
.
二、常用的查找命令
1、 get命令
get 命令獲取存儲在 key( 鍵) ) 中的 value( 數(shù)據(jù)值) ) ,如果 key 不存在,則返回空。
get 命令的基本語法格式如下:
get key
多個 key 使用空格隔開,如下:
get key1 key2 key3
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
實例
在以下實例中,我們使用 runoob 作為 key,過期時間設(shè)置為 900 秒。
set runoob 0 900 9
memcached
STORED
get runoob
VALUE runoob 0 9
memcached
END
2、 gets 命令
gets 命令獲取帶有 CAS 令牌存 的 value( 數(shù)據(jù)值) ) ,如果 key 不存在,則返回空。
gets 命令的基本語法格式如下:
gets key
多個 key 使用空格隔開,如下:
gets key1 key2 key3
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
實例
在以下實例中,我們使用 runoob 作為 key,過期時間設(shè)置為 900 秒。
set runoob 0 900 9
memcached
STORED
gets runoob
VALUE runoob 0 9 1
memcached
END
在 使用 gets 命令的輸出結(jié)果中,在最后一列的數(shù)字 1 代表了 key 為 runoob 的 CAS 令牌。
3、delete 命令
delete 命令用于刪除已存在的 key(鍵)。
delete 命令的基本語法格式如下:
delete key [noreply]
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? noreply(可選): 該參數(shù)告知服務器不需要返回數(shù)據(jù)
實例
在以下實例中,我們使用 runoob 作為 key,過期時間設(shè)置為 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(鍵) 的數(shù)字值進行自增或自減操作。
incr 與 decr 命令操作的數(shù)據(jù)必須是十進制的 32 位無符號整數(shù)。
如果 key 不存在返回 NOT_FOUND,如果鍵的值不為數(shù)字,則返回 CLIENT_ERROR,其他錯誤返回 ERROR。
incr 命令
incr 命令的基本語法格式如下:
incr key increment_value
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? increment_value: 增加的數(shù)值。
實例
在以下實例中,我們使用 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
參數(shù)說明如下:
? key:鍵值 key-value 結(jié)構(gòu)中的 key,用于查找緩存值。
? decrement_value: 減少的數(shù)值。
實例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 命令用于返回統(tǒng)計信息例如 PID(進程號)、版本號、連接數(shù)等。
stats 命令的基本語法格式如下:
stats
實例
在以下實例中,我們使用了 stats 命令來輸出 Memcached 服務信息。
stats
這里顯示了很多狀態(tài)信息,下邊詳細解釋每個狀態(tài)項:
? pid: memcache 服務器進程 ID
? uptime:服務器已運行秒數(shù)
? time:服務器當前 Unix 時間戳
? version:memcache 版本
? pointer_size:操作系統(tǒng)指針大小
? rusage_user:進程累計用戶時間
? rusage_system:進程累計系統(tǒng)時間
? curr_connections:當前連接數(shù)量
? total_connections:Memcached 運行以來連接總數(shù)
? connection_structures:Memcached 分配的連接結(jié)構(gòu)數(shù)量
? cmd_get:get 命令請求次數(shù)
? cmd_set:set 命令請求次數(shù)
? cmd_flush:flush 命令請求次數(shù)
? get_hits:get 命令命中次數(shù)
? get_misses:get 命令未命中次數(shù)
? delete_misses:delete 命令未命中次數(shù)
? delete_hits:delete 命令命中次數(shù)
? incr_misses:incr 命令未命中次數(shù)
? incr_hits:incr 命令命中次數(shù)
? decr_misses:decr 命令未命中次數(shù)
? decr_hits:decr 命令命中次數(shù)
? cas_misses:cas 命令未命中次數(shù)
? cas_hits:cas 命令命中次數(shù)
? cas_badval:使用擦拭次數(shù)
? auth_cmds:認證命令處理的次數(shù)
? auth_errors:認證失敗數(shù)目
? bytes_read:讀取總字節(jié)數(shù)
? bytes_written:發(fā)送總字節(jié)數(shù)
? limit_maxbytes:分配的內(nèi)存總大?。ㄗ止?jié))
? accepting_conns:服務器是否達到過最大連接(0/1)
? listen_disabled_num:失效的監(jiān)聽數(shù)
? threads:當前線程數(shù)
? conn_yields:連接操作主動放棄數(shù)目
? bytes:當前存儲占用的字節(jié)數(shù)
? curr_items:當前存儲的數(shù)據(jù)總數(shù)
? total_items:啟動以來存儲的數(shù)據(jù)總數(shù)
? evictions:LRU 釋放的對象數(shù)目
? reclaimed:已過期的數(shù)據(jù)條目來存儲新數(shù)據(jù)的數(shù)目
6、stats items 命令
stats items 命令用于顯示各個 slab 中 item 的數(shù)目和存儲時長(最后一次訪問距離現(xiàn)在的秒數(shù))。
stats items 命令的基本語法格式如下:
stats items
7、stats slabs 命令
stats slabs 命令用于顯示各個 slab 的信息,包括 chunk 的大小、數(shù)目、使用情況等。
stats slabs 命令的基本語法格式如下:
stats slabs
8、 stats sizes 命令
Memcached stats sizes 命令用于顯示所有 item 的大小和個數(shù)。
該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數(shù)。
stats sizes 命令的基本語法格式如下:
stats sizes
實例
stats sizes STAT 96 1 END
9、 flush_all 命令
flush_all 命令用于用于清理緩存中的所有 key=>value( 鍵 => 值) ) 對。
該命令提供了一個可選參數(shù) time,用于在指定的時間后執(zhí)行清理緩存操作。
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
網(wǎng)頁題目:Memcached常用指令
分享地址:http://jinyejixie.com/article24/gpecce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、做網(wǎng)站、網(wǎng)頁設(shè)計公司、手機網(wǎng)站建設(shè)、標簽優(yōu)化、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)