memcache 原理 监测 查看状态 stats 结构
?Mencache內(nèi)存存儲方式:slab/LRU,采用預先申請固定大小的內(nèi)存頁(slab/page),然后再把內(nèi)存分成多個塊(chunk)
先放一張從網(wǎng)上找到的memcache內(nèi)存結構圖,覺得非常的贊:
再來一張memcache slab內(nèi)存分配圖,最討厭看圖了,但是看到這圖對memcache的內(nèi)存分配豁然開朗,于是決定以后要多看圖。
Item內(nèi)存結構圖:
item就是存放在chunk中的實際數(shù)據(jù),
新建Item分配內(nèi)存過程
快速定位slab classid計算key+value+suffix+32結構體,如90byte (key鍵長+suffix+value值長+結構大小(32字節(jié)))
如果>1MB,無法存儲丟棄
取最小冗余的slab class
如:有48,96,120,存90會選擇96
按順序尋找可用chunk
slot:檢查slab回收空間slot里是否有剩余chunk
delete:delete時標記到slot
exptime:get時檢查的過期對象標記到slot
end_page_ptr:檢查page中是否有剩余chunk
memory:內(nèi)存還有剩余則開辟新的slab
LRU:Slab內(nèi)部掃描Item雙向鏈表50次
Memcache命令
連接memcache測試: telnet? ip port,如telnet 127.0.0.1 11211
存儲命令格式
<command> <key> <flags> <exptime> <bytes> [<version>]\r\n
<datablock>\r\n
?
| command | set無論如何都進行存儲 add只有數(shù)據(jù)不存在時進行添加 repalce只有數(shù)據(jù)存在時進行替換 append往后追加:append <key> datablock <status> prepend往前追加:prepend <key> datablock <status> cas按版本號更改 |
| key | 字符串,<250個字符,不包含空格和控制字符 |
| flags | 客戶端用來標識數(shù)據(jù)格式的數(shù)值,如json,xml,壓縮等 |
| exptime | 存活時間 s 以秒為單位,0為永遠,<30天60*60*24*30為秒數(shù),>30天為unixtime |
| bytes | byte字節(jié)數(shù),不包含\r\n,根據(jù)長度截取存/取的字符串,可以是0,即存空串 |
| datablock | 文本行,以\r\n結尾,當然可以包含\r或\n |
?
例:
##存入數(shù)據(jù),特別注意bytes(也就是下面那個5),bytes指明datablock字節(jié)數(shù)(\r\n算兩個字節(jié))。如果bytes與你實際輸入的datablock字節(jié)數(shù)不一致,會報client_error錯誤。set testzhong_liu 0 3600 5
ab
c
STORED
get testzhong_liu
VALUE testzhong_liu 0 5
ab
c
END
?
讀取命令格式:
<command> <key>[ key1[ key2...]\r\n
get testzhong_liu testcook VALUE testzhong_liu 0 5 ab c END計數(shù)命令incr/decr
incr/decr <key> <int>
key必需存在
value必需是數(shù)值
刪除命令delete
delete <key> [<time>]
統(tǒng)計命令
stats STAT pid 1014 //Memcache進程ID STAT uptime 8122 //Memcached運行時間,單位:秒 STAT time 1357359669 //Memcached當前的UNIX時間 STAT version 1.4.7 //Memcached的版本號 STAT libevent 2.0.19-stable STAT pointer_size 64 STAT rusage_user 0.144009 //該進程累計的用戶時間,單位:秒 STAT rusage_system 0.064004 //該進程累計的系統(tǒng)時間,單位:秒 STAT curr_connections 10 //當前連接數(shù)量 STAT total_connections 34 //Memcached運行以來接受的連接總數(shù) STAT connection_structures 11 //Memcached分配的連接結構的數(shù)量 STAT cmd_get 64 //查詢請求總數(shù) STAT cmd_set 10 //存儲(添加/更新)請求總數(shù) STAT cmd_flush 0 //flush請求總數(shù) STAT get_hits 60 //查詢成功獲取數(shù)據(jù)的總次數(shù) STAT get_misses 4 //查詢成功未獲取到數(shù)據(jù)的總次數(shù) STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 10753 //Memcached從網(wǎng)絡讀取到的總字節(jié)數(shù) STAT bytes_written 227141 //Memcached向網(wǎng)絡發(fā)送的總字節(jié)數(shù) STAT limit_maxbytes 67108864 //Memcached在存儲時被允許使用的字節(jié)總數(shù) STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT bytes 8416 //Memcached當前存儲內(nèi)容所占用字節(jié)數(shù) STAT curr_items 4 //Memcached當前存儲的內(nèi)容數(shù)量 STAT total_items 7 //Memcached啟動以來存儲過的內(nèi)容總數(shù) STAT evictions 0 //LRU釋放對象數(shù),用來釋放內(nèi)存 STAT reclaimed 0 ENDstats settings
stats items
stats sizes
stats slabs
其他命令
-version -flush_all -quit -echo|nc 快捷方式 echo get testzhong_liu | nc localhost 11210知識點:
windows下修改memcached運行參數(shù):
1>開始>運行:regedit(回車)
2>在注冊表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
3>默認的ImagePath鍵的值是:"c:\memcached\memcached.exe" -d runservice,改為:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55
4>我的電腦(右鍵)>管理>服務 找到memcache的服務,重新啟動一次即可生效。
參考:http://blog.csdn.net/zhxp_870516/article/category/1310409/1
轉載于:https://www.cnblogs.com/mengzhongshi/p/3511668.html
總結
以上是生活随笔為你收集整理的memcache 原理 监测 查看状态 stats 结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一起谈.NET技术,Silverligh
- 下一篇: 中断处理