• 欢迎访问小杰博客网站
  • 欢迎访问小杰博客网站哦

memcached telnet命令

未分类 小杰 3年前 (2015-12-30) 232次浏览 未收录 0个评论

连接

cmd下执行:

格式:telnet ip port,如下:

telnet 127.0.0.1 11211

如连接失败,显示

 memcached telnet命令 - 白杨 - 白杨的博客

 

退出

quit

 

命令说明:

一、存储命令

存储命令的格式:

?

1

2

<command name> <key> <flags> <exptime> <bytes>

<data block>

参数说明如下:

<command name>

set/add/replace

<key>

查找关键字

<flags>

整型参数,客户机使用它存储关于键值对的额外信息

<exptime>

该数据的存活时间(以秒为单位,表示永远) 

<bytes>

存储字节数

<data block>

存储的数据块(可直接理解为key-value结构中的value

1、添加

(1)、无论如何都存储的set,如果setkey已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

set a 0 0 4

1234

回显:

STORED

可以通过“get key”的方式查看添加进去的记录:

get a

回显:

VALUE a 0 4

1234

END

 

(2)、只有数据不存在时进行添加的add

add b 0 0 3

123

STORED

如果key已经存在,则回显

NOT_STORED

 

(3)、只有数据存在时进行替换的replace

replace b 0 0 2

aa

STORED

如果key不存在,则回显

NOT_STORED

 

2、删除

命令:delete key

删除已存在的键值和不存在的记录可以返回不同的结果

delete c

NOT_FOUND

delete b

DELETED

 

3、修改

命令:delete key

删除已存在的键值和不存在的记录可以返回不同的结果

二、读取命令

1get

get命令的key可以表示一个或者多个键,键之间以空格隔开

获取一个

get b

VALUE b 0 2

aa

END

获取多个

get a b

VALUE a 0 4

1234

VALUE b 0 2

aa

END

 

2gets

gets命令比普通的get命令多返回了一个数字。这个数字可以检查数据是否发生改变。当key对应的数据改变时,这个多返回的数字也会改变。

get a

VALUE a 0 4

1234

END

gets a

VALUE a 0 4 2

1234

END

 

get b

VALUE b 0 2

aa

END

gets b

VALUE b 0 2 5

aa

END

 

3cas

caschecked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。

gets a

VALUE a 0 4 2

1234

END

cas a 0 0 4 3

2154EXISTS        ——存储失败

get a

VALUE a 0 4

1234

END

cas a 0 0 4 2

4321

STORED        ——存储成功

gets a

VALUE a 0 4 6

4321

END

 

三、状态命令

1stats  全局统计

memcached telnet命令 - 白杨 - 白杨的博客

 

可以计算缓存命中率

命中率=get_hits / (get_hits + get_misses)

get_hits表示命中次数

get_misses表示未命中次数

注意:这个命中率是从memcached启动开始所有的请求的综合值,不能反映一个时间段内的情况

 

2stats items  统计各slab class中的item的情况

memcached telnet命令 - 白杨 - 白杨的博客

 

执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

number 3 表示当前有3个值

age:反应了当前还在缓存的数据中最久的时间

evicted:如果一个slab的evicted属性不是0,则说明当前slab出现了提前剔除数据的情况,这个slab可能是你需要注意的。

evicted_time:如果evicted不为0,则evicited_time就代表最后被剔除的数据时间缓存的时间。

3stats slabs  统计slabs的使用情况


chunk_size    当前slab每个chunk的大小

chunk_per_page     每个page能够存放的chunk

total_pages  分配给当前slabpage总数

total_chunks 当前slab最多能够存放的chunk数,应该等于chunck_per_page * total_page

used_chunks 已经被占用的chunks总数

free_chunks  过期数据空出的chunk里还没有被使用的chunk

free_chunks_end     新分配的但是还没有被使用的chunk

 

这个命令的信息量很大,所有属性都很有价值。下面一一解释各属性:

chunk_size, chunk_per_page

这两个属性是固定的,但是它反映当前slab存储的数据大小,可以供你分析缓存数据的散列区间,通过调整增长因子可以改变slab的区间分布,从而改变数据散列到的区域。如果大量的230byte260byte的数据,而刚好一个slab大小是250byte,则250byte260byte的数据将被落到下一个slab,从而导致大量的空间浪费。

total_pages

这个是当前slab总共分配大的page总数,如果没有修改page的默认大小的情况下,这个数值就是当前slab能够缓存的数据的总大小(单位为M)。如果这个slab的剔除非常严重,一定要注意这个slabpage数是不是太少了。

我上次处理的那个项目因为和另外的一个项目共用的memcache,而且memcache已经运行了很长时间,导致page都已经全部被分配完,而刚好两个项目的缓存数据大小差别很多,导致新项目数据最多的slab 4竟然只有一个page,所以数据缓存不到22s就被替换了,完全失去了缓存的意义。

针对我遇到的那个情况,解决方案是重新分配page,或者重启memcache服务。但是page reassign方法从1.2.8版已经完全移除了,所以现在没有办法在线情况下重新分配page了。另外一种有些时候是不可以接受的,因为一次缓存服务器的重启将导致所有缓存的数据将重新从DB取出,这个可能造成db的压力瞬间增大。而且有的缓存数据时不入库的,这个时候我们就需要做memcache的导入和导出了。在下篇文章中我会总结下memcachedump操作。

total_chunks

这个的作用和total_pages基本相同,不过这个属性可以更准确的反应实际可以存放的缓存对象总数。

used_chunks, free_chunks, free_chunks_end

这三个属性相关度比较高,从数值上来看它们满足:

total_chunks = used_chunks + free_chunks + free_chunks_end

used_chunks就是字面的意思,已经使用的chunk数;free_chunks却不是所有的未被使用的chunk数,而是曾经被使用过但是因为过期而被回收的chunk数;free_chunks_endpage中从来没有被使用过的chunk数。

 

3stats cachedump slab_id limit_num

我们执行stats cachedump 1 0 命令效果如下:

memcached telnet命令 - 白杨 - 白杨的博客

 

命令当中的1,即为 memcached telnet命令 - 白杨 - 白杨的博客 中的10表示全部取出,n表示取出n

这里slab_id1,是由2中的stats items返回的结果(STAT items后面的数字)决定的;limit_num看起来好像是返回多少条记录,猜的一点不错, 不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。

通过stats itemsstats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。

 

4、其他stats命令

stats slabs,stats sizes,stats reset等等使用也比较常见。

 

四、其他常见命令

1append

在现有的缓存数据添加缓存数据,如现有缓存的key不存在服务器响应为NOT_STORED

 memcached telnet命令 - 白杨 - 白杨的博客

 

2prepend

append非常类似,但它的作用是在现有的缓存数据添加缓存数据。

 memcached telnet命令 - 白杨 - 白杨的博客

 

3flush_all [<delay>]

该命令有一个可选的数字参数。它总是执行成功,服务器会发送 OK\r\n 回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。

这个最简单的命令仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则flush_all 能提供很大的用处。

memcached telnet命令 - 白杨 - 白杨的博客

 

flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。

 

4incr/decr

对于存储为数字型(正值)的可以通过incr/decr命令进行增减操作。

memcached telnet命令 - 白杨 - 白杨的博客

 

这两个命令是原子操作

这两个操作的前提是这个key存在且其值是一个有效的64-bit无符号整数的十进制表示(在内部存储时,其实是用的字符串)

decr0后,再decr不会有效果。但incr到最大值后会溢出


小杰博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:memcached telnet命令
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址