Memcache Telnet基本操作命令

来源:互联网 发布:神秘的东方力量 知乎 编辑:程序博客网 时间:2024/05/16 19:00

一、概要介绍 
在正确安装、启动Memcache服务后,接下来应该为需要使用Memcache服务的应用系统下载相应开发语言的客户端程序包(如Java版客户端,PHP的memcache扩展等),但这里我想先为各位介绍一下Memcache Telnet的基本操作,暂时能想到的原因如下: 
1、Telnet是最方便的客户端访问工具,Linux自带或非常容易安装。 
2、能够最方便、最直接的了解Memcache功能的基本使用,比如set,get命令的使用。 
3、在应用系统运维期间,对Memcache的部分操作可以在Telnet中完成,如清空缓存,查看数据确认应用系统是否正常使用Memcache服务等。 
4、为以后阅读Memcache客户端开发包打下基础,Memcache客户端其中一个核心的功能就是在代码里拼接Memcache的访问命令,然后通过Socket通信将命令传输到Memcache服务端节点。

二、telnet请求命令格式 
<Command name> <key> <flags> <exptime> <bytes>\r\n 
<data block> \r\n

简单解释 
<Command name>:可以是add,set,replace等 
<key>:为memcache key键的名称,要求唯一 
<flags>:是一个16位的无符号整数(10进制),该标志和需要存储的数据一起存储,并在客户端get数据时返回。客户可以将此标志用做特殊用途,此标志对服务器来说是透明的。 
<exptime>:过期的时间,单位为秒,设置为0表示永不过期。 
<bytes>:需要存储的字节数(不包含最后的“\r\n ”),可以为0,表示空数据。 
\r\n:命令结尾标识符,在telnet界面输入命令时按回车键即可。 
<data block>:表示存储的数据内容,即value。

三、telnet命令响应 
Stored 表示存储成功 
not_stored:表示存储失败(命令正确,但操作不对) 
Error:表示命令错误

四、常用命令

命令命令说明示例备注get获取值get mykey set设定一个值set mykey 0 60 5 add添加一个值add mykey 0 60 5 replace替换值replace mykey 0 60 5 append在后面追加值append mykey 0 60 5 prepend在前面追加值prepend mykey 0 60 5 incr数值类的值增加给定数字值incr mykey 2 decr数值类的值减少给定数字值decr mykey 5 flush_all刷新items:有两种使用方法 ,立即刷新和延迟指定时间后刷新。flush_all /flush_all 100立即刷新;/延迟N秒后刷新; stats普通stats查询stats  内存块使用查询stats slabs显示各个slab的信息,包括chunk的大小,数目,使用情况等 (不能使用了)stats malloc  查询分配的itemstats items显示各个slab中item的数目和最老item的年龄 stats详细信息操作命令,有on/off/dump三个选项stats detail on  统计数量stats sizes  重置stats reset清空统计数据version查看服务端版本version verbosity提升日志级别,有info/error级别可供选择verbosity info quit退出quit  

注意: 
1)get,set等命令执行完后,敲回车,输入值的内容,再敲回车即可看到stored字样。 
2)add,set,replace等命令操作同一个item时,超时时间 以最后一个为准。 
3)incr/decr命令,decr的结果最小为0,不会出现负数的情况。

五、stats 命令详解

名称说明示例pidmemcache服务器的进程IDSTAT pid 2713uptime服务器已经运行的秒数STAT uptime 315time服务器当前的unix时间戳STAT time 1451121349versionmemcache版本STAT version 1.4.25pointer_size当前操作系统的指针大小(32位系统一般是32bit,64位系统为64)STAT pointer_size 64rusage_user进程的累计用户时间STAT rusage_user 0.001999rusage_system进程的累计系统时间STAT rusage_system 0.081987curr_items服务器当前存储的items数量STAT curr_items 0total_items从服务器启动以后存储的items总数量STAT total_items 2bytes当前服务器存储items占用的字节数STAT bytes 0curr_connections当前打开着的连接数STAT curr_connections 5total_connections从服务器启动以后曾经打开过的连接数STAT total_connections 6connection_structures服务器分配的连接构造数STAT connection_structures 6cmd_getget命令(获取)总请求次数STAT cmd_get 5cmd_setset命令(保存)总请求次数STAT cmd_set 2get_hits总命中次数STAT get_hits 3get_misses总未命中次数STAT get_misses 2evictions为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)STAT evictions 0bytes_read总读取字节数(请求字节数)STAT bytes_read 137bytes_written总发送字节数(结果字节数)STAT bytes_written 1258limit_maxbytes分配给memcache的内存大小(字节)STAT limit_maxbytes 134217728threads当前线程数STAT threads 4 

注意:输入命令返回的示例,都带了STAT 前缀的。 
Memcache1.4.25 stats命令新增了较多新的属性,此列表列举的还是较老版本的属性,未列出的属性可根据名称了解大致的作用即可。

六、stats slabs命令详解 
显示各个slab的信息,包括Chunk的大小,数目,使用情况等。

名称说明示例chunk_sizechunk的大小STAT 1:chunk_size 96chunks_per_page每个page分配的chunk数量STAT 1:chunks_per_page 10922total_pagespage数量,单位为MSTAT 1:total_pages 1total_chunkschunk总数(等于chunks_per_page *total_pages )STAT 1:total_chunks 10922used_chunks使用的chunksSTAT 1:used_chunks 0free_chunks闲置的chunksSTAT 1:free_chunks 10922free_chunks_end新分配的但是未使用的chunk数STAT 1:free_chunks_end 0mem_requested实际占用的内存大小STAT 1:mem_requested 0get_hits总命中次数STAT 1:get_hits 3cmd_setset命令总请求次数STAT 1:cmd_set 2delete_hitsdelete命令总请求次数STAT 1:delete_hits 0incr_hitsincr命令总请求次数STAT 1:incr_hits 0decr_hitsdecr命令总请求次数STAT 1:decr_hits 0cas_hitscas命令总请求次数STAT 1:cas_hits 0cas_badvalcas擦试请求总数STAT 1:cas_badval 0touch_hitstouch命令总请求次数STAT 1:touch_hits 0active_slabs活动的slab总数,编号不一定连续,是按内存区间排定的STAT active_slabs 1total_malloced实际已分配的总内存数,单位为byteSTAT total_malloced 1048512 

注意: 
1)total_chunks的两则计算公式 
total_chunks=used_chunks+free_chunks+free_chunks_end 
total_chunks=chunks_per_page *total_pages

2)输入命令返回的示例,都带了STAT 1前缀的,1为slab编号。最后两行其实是该命令的统计行,注意前缀为STAT 。

七、stats imtes命令详解 
显示各个slab中的item的数目和最老item的年龄(最后一次访问距离现在的秒数)

名称说明示例number当前slab存储的chunk总数。STAT items:1:number 1age最老item的年龄STAT items:1:age 5evicted被释放的个数STAT items:1:evicted 0evicted_nonzero显示未达到存活期的,但是被释放的items总数STAT items:1:evicted_nonzero 0evicted_time最后被释放的缓存对象时间STAT items:1:evicted_time 0outofmemory申请内存失败的次数STAT items:1:outofmemory 0tailrepairsslab内部执行LRU算法清理item对象出现内存泄露时,自行解决恢复的次数STAT items:1:tailrepairs 0reclaimed因为超时而被回收的次数STAT items:1:reclaimed 0expired_unfetchedslab内部执行LRU算法清理item对象,过期item未取到的次数STAT items:1:expired_unfetched 0evicted_unfetchedslab内部执行LRU算法清理item对象,释放item未取到的次数STAT items:1:evicted_unfetched 0crawler_reclaimed过期item对象失效被回收的次数STAT items:1:crawler_reclaimed 0crawler_items_checkeditem回收的次数STAT items:1:crawler_items_checked 0lrutail_reflocked执行LRU算法回收内存对象时,被多个线程加锁导致无法正确回收的次数(属于意外情况,正常情况是只被一个线程加锁)STAT items:1:lrutail_reflocked 0 

注意: 
1)输入命令返回的示例,都带了STAT items:1前缀的,1为slab的编号。 
2)如果evicted的个数很大,说明需要经常剔除,那么就是节点分配的内存不够,若reclaimed的个数很大,则说明经常会有超时现象,那么缓存的时间应该设置长些。 
3)这里有几个参数都是跟memcache的LRU内存替换算法相关的,在memcache源码的item.c类里,各位有兴趣可作深入研究。

八、Stats命令观测 
1、limit_maxbytes,bytes 
limit_maxbytes为总的存储大小,而bytes就是已经使用的大小,从这两个数据就可以看出在memcache启动时,我们的内存是否足够使用。 
2、cmd_get,cmd_set 
可以查看应用程序一共对它做了多少次读取操作。 
3、get_hits,get_missess 
用来评估缓存命中率,可以评估我们使用的策略是否合理。 
get_hits表示命中了多少次读取,get_misses表示没有命中的次数。一般来说:cmd_get=get_hits+get_missess。
命中率计算:命中率=(get_hits/cmd_get) *100%。 
4、flush_all 
并不会将item直接删除,只是将所有的items标记为expired,因此这时memcache依旧占有所有内存 
问:什么时候会清内存?等待GC?

九、高级缓存细节查看方法 
1、stats cachedump slab_id limit_num 
显示某个slab中的前limit_num个key列表,slab_id为slab的id号,通过命令stats slabs得到。

列表格式: 
ITEM key_name [value_length b; expire_times s] 
其中,1.2.4版本以上显示的是过期时间,若永不过期,expire_time会显示为服务器启动时间。value_length后面的b为长度单位,固定显示符为b,表示byte。

例:添加缓存对象 add a 0 60 2 (value为bb)则列表为 
ITEM a [2b; 1442649438 s]

2、stats detail [on/off/dump] 
设置或者显示详细操作记录 
on:打开详细操作记录 
off:关闭详细操作记录 
dump:显示详细操作记录(每一个键值get,set,hit,del的次数) 
问:操作记录在哪儿能看到?是不是在memcached的日志里?

3、memcache cas操作 
搭配gets一起使用,用来解决并发的一些问题。 
gets可以查询出当前的唯一版本号。 
cas带更新时,要带上最新的版本号,否则更新失败。

示例(假设key值为aa) 
这里写图片描述

cas命令解释 
这里写图片描述

注意:cas的唯一版本号必须是gets的最新值,否则更新失败,会提示Exists。操作正常提示STORED,如下图所示,当前最新版本号为2

这里写图片描述

原文地址:http://blog.csdn.net/dailywater/article/details/50783636