欢迎关注本人公众号
telnet到memcached服务器后有很多的命令可以使用,除了大家熟知的add、get、set、incr、decr、replace、delete等赋值命令外,还有一系列的获取服务器信息的命令,这部分命令都是以stats开头的。
memcached 查看方法
格式: telnet ip port
例如 telnet localhost 11211
退出命令:quit
一.存储命令
存储命令格式:
- <command name> <key> <flag> <expire> <bytes>
- <data block>
参数说明:
command name | 命令名称 |
key | 查找关键字 |
flag | 存储额外信息 |
expire | 数据保存时间,0表示永远,单位秒 |
bytes | 存储数据的字节数 |
data block | 存储的数据 |
1.set 无论如何都存储,数据不存在时存储,数据存在时更新。
- set mykey 0 0 3
- 123
- STORED
- set mykey 0 0 3
- 456
- STORED
- add mykey 0 0 3
- 123
- STORED
- add mykey 0 0 3
- 456
- NOT_STORED
- set mykey 0 0 3
- 123
- STORED
- replace mykey 0 0 3
- 456
- STORED
- delete mykey
- DELETED
- replace mykey 0 0 3
- 678
- NOT_STORED
二.读取命令
1.get key 可以一个或多个,用空格格开。
- set mykey 0 0 3
- 123
- STORED
- set mykey1 0 0 3
- 456
- STORED
- get mykey mykey1
- VALUE mykey 0 3
- 123
- VALUE mykey1 0 3
- 456
- END
- set mykey 0 0 3
- 123
- STORED
- gets mykey
- VALUE mykey 0 3 7
- 123
- END
- replace mykey 0 0 3
- 888
- STORED
- gets mykey
- VALUE mykey 0 3 8
- 888
- END
3.cas cas即checked and set ,当最后一个参数与gets返回的数字一致时才存储,否则返回EXISTS。
- set mykey 0 0 3
- 123
- STORED
- gets mykey
- VALUE mykey 0 3 9
- 123
- END
- cas mykey 0 0 3 8
- 456
- EXISTS
- cas mykey 0 0 3 9
- 456
- STORED
三.追加与清除命令
1.append 将数据追加到当前缓存数据的之后,当缓存数据存在时才存储。
- set mykey 0 0 3
- 123
- STORED
- append mykey 0 0 3
- 456
- STORED
- get mykey
- VALUE mykey 0 6
- 123456
- END
- append notexists 0 0 3
- 456
- NOT_STORED
2.prepend 将数据追加到当前缓存数据的之前,当缓存数据存在时才存储。
- set mykey 0 0 3
- 123
- STORED
- prepend mykey 0 0 3
- 456
- STORED
- get mykey
- VALUE mykey 0 6
- 456123
- END
- prepend notexists 0 0 3
- 456
- NOT_STORED
3.delete 删除缓存数据,数据存在返回DELETED,数据不存在返回NOT_FOUND
- set mykey 0 0 3
- 123
- STORED
- delete mykey
- DELETED
- delete mykey
- NOT_FOUND
- flush_all
- OK
四.状态命令
1.stats 查看memcached运行状态
- pid Memcached 进程ID
- uptime Memcached 运行时间,单位:秒
- time Memcached 当前的UNIX时间
- version Memcached 的版本号
- rusage_user 该进程累计的用户时间,单位:秒
- rusage_system 该进程累计的系统时间,单位:秒
- curr_items Memcached 当前存储的内容数量
- total_items Memcached 启动以来存储过的内容总数
- bytes Memcached 当前存储内容所占用的字节数(*/1024/1024=mb)
- curr_connections 当前连接数量
- total_connections Memcached 运行以来接受的连接总数
- connection_structures Memcached 分配的连接结构的数量
- cmd_get 查询请求总数
- cmd_set 存储(添加/更新)请求总数
- get_hits 查询成功获取数据的总次数
- get_misses 查询成功未获取到数据的总次数
- bytes_read Memcached 从网络读取到的总字节数
- bytes_written Memcached 向网络发送的总字节数
- limit_maxbytes Memcached 在存储时被允许使用的字节总数
2.stats items
执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。
3.stats cachedump slabs_id limit_num
slabs_id:由stats items返回的结果(STAT items后面的数字)决定的
limit_num:返回的记录数,0表示返回所有记录
通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。
- stats cachedump 1 0
- ITEM mykey [3 b; 1362880145 s]
- END
4.stats slabs 显示各个slab的信息,包括chunk的大小、数目、使用情况等
5.stats sizes 输出所有item的大小和个数
6.stats reset 清空统计数据
7 stats maps 是把/proc/self/maps的数据显示出来
如果远程攻击者连接到了memcached的TCP端口(默认11211)并发布了stats maps命令,Memcached就会直接将/proc/self/maps的输出管道传输给客户端。这可能导致泄漏所分配内存区域的地址。
stats slabs
- STAT 1:chunk_size 88
- STAT 1:chunks_per_page 11915
- STAT 1:total_pages 1
- STAT 1:total_chunks 11915
- STAT 1:used_chunks 11915
- STAT 1:free_chunks 0
- STAT 1:free_chunks_end 11914
- STAT active_slabs 1
- STAT total_malloced 1048520
- END
chunk_size:每个chunk(块)使用的空间数量,一个item存储到一个近似大小的chunk中
chunk_per_page:每page存在的chunk数量,slabs是按页(page)分配的,一页一般为1M,每个slab(也即每页)又划分为若干chunk,这里涉及到memcached的内存管理,这里不多解释,可以参考后面的附文。
total_pages:该slabclass分配到的page数量
total_chunks:该slabclass拥有的chunk数量
used_chunks:已经分配给item的chunk数量(不一定已经装填了item)
free_chunks:尚未分配给item的chunk数量,或者由delete释放的chunk
free_chunks_end:slabclass中最后一页的自由块数量,即该slabclass尚有多少自由块可以用来装填item
active_slabs:已分配的slabclass数量
total_malloced:已分配给slab page的内存数量
stats items 显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)stats detail [on|off|dump]
设置或者显示详细操作记录
参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)
- stats items dump
- STAT items:1:number 7
- STAT items:1:age 23124
- STAT items:1:evicted 0
- STAT items:1:outofmemory 0
- .........
- END
stats cachedump slab_id limit_num 显示某个slab中的前limit_num个key列表
显示格式如下:ITEM key_name [ value_length b; expire_time|access_time s]其中,memcached 1.2.2及以前版本显示的是 访问时间(timestamp) 1.2.4以上版本,包括1.2.4显示 过期时间(timestamp)
如果是永不过期的key,expire_time会显示为服务器启动的时间
- stats cachedump 7 2
- ITEM copy_test1 [250 b; 1207795754 s]
- ITEM copy_test [248 b; 1207793649 s]stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats detail dump ( stats detail [on|off|dump] )
- PREFIX copy_test2 get 1 hit 1 set 0 del 0
- PREFIX copy_test1 get 1 hit 1 set 0 del 0
- PREFIX cpy get 1 hit 0 set 0 del 0