日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

memcached协议

發(fā)布時間:2024/9/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 memcached协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

memcached協(xié)議

舊版:http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

新版:https://github.com/memcached/memcached/blob/master/doc/protocol.txt

一、協(xié)議

????? ? memcached的客戶端使用TCP連接同memcached進(jìn)行交互,memcached服務(wù)器監(jiān)聽指定的端口(默認(rèn)端口是11211)。Client連接到memcached服務(wù)器,發(fā)送指令,獲取數(shù)據(jù),然后關(guān)閉連接。

?????? ?通常沒有必要發(fā)送任何命令來關(guān)閉某個會話。客戶端可以在任何時候關(guān)閉不需要的連接。然而,通常鼓勵客戶端緩存這些連接,因?yàn)閙emcached服務(wù)器本身就被設(shè)計(jì)成為一個可以支持成百上千個連接的服務(wù)器,而客戶端緩存了連接后,就可以避免重復(fù)的建立連接的開銷。

??????? memcached協(xié)議中包含兩部分?jǐn)?shù)據(jù),文本行和非結(jié)構(gòu)化數(shù)據(jù)。前者是來自客戶端的命令或來自服務(wù)器端的響應(yīng),后者代表客戶端存取的數(shù)據(jù)。命令以\r\n結(jié)尾,數(shù)據(jù)可以是\r,\n或者\(yùn)r\n結(jié)尾來標(biāo)識各自部分的結(jié)束。

二、鍵

??????? memcached一般通過key來存儲,一個key的長度一般不能超過250字符。key不能包含控制字符或空白字符

三、命令

有三種類型的命令:

??? 1、存儲命令:set、add、replace、append、prepend、cas

??? 2、讀取命令:get、gets

??? 3、第三種命令,不涉及到非結(jié)構(gòu)化數(shù)據(jù)。客戶端發(fā)出這樣的命令,服務(wù)端會返回響應(yīng)結(jié)果

1、過期時間

??????? 過期時間的取值,有兩種:一種是Unix時間(自1970.1.1開始到現(xiàn)在的秒數(shù)),另一種是相對當(dāng)前時間的秒數(shù)。如果過期時間的秒數(shù)大于60*60*24*30(即30天),則服務(wù)端認(rèn)為是Unix時間。

2、錯誤設(shè)置

??????? 客戶端發(fā)出的每個命令,服務(wù)端可能會返回錯誤提示字符。錯誤提示字符有如下三種:

????? 1)??ERROR\r\n :表示客戶端發(fā)送的命令不存在

????? 2)??CLIENT_ERROR <error>\r\n :表示客戶端的輸入有錯誤

????? 3)??SERVER_ERROR <error>\r\n :服務(wù)器端的錯誤

3、存儲命令:

命令格式:<command name> <key><flags> <exptime> <bytes> [noreply]\r\n

命令名:如set、add、replace、append、prepend

命令名稱

作用

set

存儲這個數(shù)據(jù)

add

存儲這個數(shù)據(jù),當(dāng)且僅當(dāng)這個key不存在的時候

replace

存儲這個數(shù)據(jù),當(dāng)且僅當(dāng)這個key存在

append

將數(shù)據(jù)存放在已存在的key對應(yīng)的內(nèi)容的后面,忽略<flags>和<exptime>

prepend

將數(shù)據(jù)存放在已存在的key對應(yīng)的內(nèi)容的前面,忽略<flags>和<exptime>

cas

存儲這個數(shù)據(jù),當(dāng)且僅當(dāng)該數(shù)據(jù)自從最后被獲取到現(xiàn)在沒有被更新

flags:一個任意的32位(舊版本是16位)無符號整數(shù)

exptime:過期時間,如果為0,表示永不過期。單位秒

bytes:表示將要存儲的數(shù)據(jù)的字節(jié)數(shù),可以為0。要存儲的內(nèi)容的字節(jié)數(shù),必須等于該值,不能大于也不能小于。

例子:將一個整數(shù)12,存放到memcache中,key為var,flags為1,過期時間為1000,字節(jié)數(shù)為2

用telnet連接memcached服務(wù)器端:

輸入命令如下:set var 1 1000 2,然后按回車,之后輸入要存儲是數(shù)據(jù):12,按回車,服務(wù)器返回STORED,如下:

通過get命令查看剛才存儲的內(nèi)容:

4、獲取命令

格式:

????? get? <key>*\r\n

????? gets <key>*\r\n

<key>*,表示可以有多個key,各個key之間用空格隔開。

執(zhí)行該命令,服務(wù)器返回0個或多個item,每個item的格式如下:

? ??? VALUE <key> <flags><bytes> [<cas unique>]\r\n

? ??? <data block>\r\n

bytes為數(shù)據(jù)內(nèi)容的長度,data block為key對應(yīng)的數(shù)據(jù)內(nèi)容

例子:

5、刪除命令

格式: delete <key> [noreply]\r\n

noreply參數(shù),告訴服務(wù)器不用發(fā)送響應(yīng)

該命令的返回結(jié)果,可能是:

????? ?DELETE\r\n???? ??表示刪除成功

????? ?NOT_FOUND\r\n? ?沒有對應(yīng)的key

例子:

6、增加/減少命令

命令格式:

???? ??incr <key> <value> [noreply]\r\n?? 或? ?decr <key> <value> [noreply]\r\n

value為要增加或減少的值。

操作成功,服務(wù)器返回操作之后的值。

對于decr操作,如果操作之后的值小于0,則置為0

不能直接使用incr和decr,必須先set或者add后再使用,而且值為數(shù)字類型,在增加時,存儲的區(qū)域會擴(kuò)展。

例子:

7、touch

該命令用來更新已存在的item的過期時間,格式如下:(低版本不支持該命令)

????? touch <key> <exptime> [noreply]\r\n

執(zhí)行該命令后,如果返回”TOUCHED\r\n”,則執(zhí)行成功

8、統(tǒng)計(jì)命令

命令格式:

??? 1)????stats\r\n???????? 查看通用的統(tǒng)計(jì)信息

??? 2)????stats <args>\r\n

通用統(tǒng)計(jì)信息,例子:

具體含義:

名稱

類型

含義

pid

32u (32位無符號整數(shù))

memcached server的pid

uptime

32u

memcached server自啟動到現(xiàn)在的時間(秒)

time

32u

當(dāng)前UNIX的時間

version

string

memcached server的版本號

pointer_size

32

操作系統(tǒng)默認(rèn)的指針大小

curr_items

32u

當(dāng)前存儲的item數(shù)目

total_items

32u

server從啟動到現(xiàn)在,總共累計(jì)存儲的item數(shù)目

bytes

64u

當(dāng)前存儲item所花費(fèi)的字節(jié)數(shù)

curr_connections

32u

當(dāng)前的客戶端連接數(shù)

total_connections

32u

server從啟動到現(xiàn)在,累計(jì)的客戶端連接數(shù)

connection_structures

32u

server分配的連接結(jié)構(gòu)數(shù)

cmd_get

64u

get的次數(shù)

cmd_set

64u

set的次數(shù)

get_hits

64u

get命中的次數(shù)

get_misses

64u

get沒有命中,miss的次數(shù)

evictions

64u

為新的item釋放內(nèi)存空間而被移除的有效item的數(shù)目。如果cache的size比較小,則淘汰策略經(jīng)常發(fā)生

bytes_read

64u

從cache中讀取的總字節(jié)數(shù)

bytes_written

64u

寫入cache的總字節(jié)數(shù)

limit_maxbytes

32u

該memcached server分配的最大內(nèi)存數(shù)量

9、item統(tǒng)計(jì)信息

stats命令后面帶上參數(shù):items。? 返回存儲在每個slab的item信息,格式如下:

?????? STAT items:<slabclass>:<stat><value>\r\n

例子:

10、itemsize統(tǒng)計(jì)信息

stats命令后面帶上參數(shù)sizes,返回存儲在cache中的總體大小及item數(shù)目。

注意:該命令會鎖住cache,它會遍歷每個item并計(jì)算大小,在此之間,我們是無法訪問server的,因此要慎重使用該命令。

返回結(jié)果的格式如下:

???? <size> <count>\r\n

其中:

???? 'size' is an approximate size of the item,within 32 bytes.

???? 'count' is the amount of items that existwithin that 32-byte range.

例子:

11、slab統(tǒng)計(jì)信息

stats命令帶上參數(shù)slabs,返回memcached運(yùn)行期間創(chuàng)建的每個slab的信息。

數(shù)據(jù)格式:STAT <slabclass>:<stat> <value>\r\n

例子:

名稱

含義

chunk_size

每個塊的大小。一個item使用一個大小適當(dāng)?shù)膲K。

chunks_per_page

一頁的塊數(shù),一頁的默認(rèn)大小小于等于1M,,chunks_per_page * chunk_size = 1MB。 slab按頁分配,每頁劃分成不同的塊

total_pages

分配給slab的頁數(shù)

total_chunks

分配給slab的塊數(shù)

used_chunks

已分配給item的塊數(shù)

free_chunks

未分配給item的塊數(shù)

free_chunks_end

目前可以使用的塊數(shù)

mem_requested

請求存儲在該slab的字節(jié)數(shù)

active_slabs

已經(jīng)分配的slab數(shù)量

total_malloced

已經(jīng)分配給slab的字節(jié)數(shù)

item存放在slab中,該slab的大小大于或等于該item的大小。mem_requested表示一個slab中所有item的大小。

total_chunks * chunk_size – mem_requested,表示一個slab中所浪費(fèi)的內(nèi)存大小。如果有很多浪費(fèi),則需要考慮調(diào)整slab因子

12、其他命令

???? 1)???flush_all :執(zhí)行該命令,將導(dǎo)致memcache中所存在的所有item都失效。也可以指定在一段時間之后失效。例子:

??? 2)???version : 查看memcache的版本號

??? 3)quit :關(guān)閉連接

總結(jié)

以上是生活随笔為你收集整理的memcached协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。