Memcache Telnet基本操作命令

本文详细介绍了如何使用 Telnet 工具进行 Memcache 的基本操作,包括 set、get、add 等命令的使用方法及响应结果。此外还深入探讨了 stats、statsslabs 和 statsitems 等命令的使用场景与含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概要介绍 
在正确安装、启动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  
  查询分配的item stats 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 命令详解

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

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

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

名称 说明 示例
chunk_size chunk的大小 STAT 1:chunk_size 96
chunks_per_page 每个page分配的chunk数量 STAT 1:chunks_per_page 10922
total_pages page数量,单位为M STAT 1:total_pages 1
total_chunks chunk总数(等于chunks_per_page *total_pages ) STAT 1:total_chunks 10922
used_chunks 使用的chunks STAT 1:used_chunks 0
free_chunks 闲置的chunks STAT 1:free_chunks 10922
free_chunks_end 新分配的但是未使用的chunk数 STAT 1:free_chunks_end 0
mem_requested 实际占用的内存大小 STAT 1:mem_requested 0
get_hits 总命中次数 STAT 1:get_hits 3
cmd_set set命令总请求次数 STAT 1:cmd_set 2
delete_hits delete命令总请求次数 STAT 1:delete_hits 0
incr_hits incr命令总请求次数 STAT 1:incr_hits 0
decr_hits decr命令总请求次数 STAT 1:decr_hits 0
cas_hits cas命令总请求次数 STAT 1:cas_hits 0
cas_badval cas擦试请求总数 STAT 1:cas_badval 0
touch_hits touch命令总请求次数 STAT 1:touch_hits 0
active_slabs 活动的slab总数,编号不一定连续,是按内存区间排定的 STAT active_slabs 1
total_malloced 实际已分配的总内存数,单位为byte STAT 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 1
age 最老item的年龄 STAT items:1:age 5
evicted 被释放的个数 STAT items:1:evicted 0
evicted_nonzero 显示未达到存活期的,但是被释放的items总数 STAT items:1:evicted_nonzero 0
evicted_time 最后被释放的缓存对象时间 STAT items:1:evicted_time 0
outofmemory 申请内存失败的次数 STAT items:1:outofmemory 0
tailrepairs slab内部执行LRU算法清理item对象出现内存泄露时,自行解决恢复的次数 STAT items:1:tailrepairs 0
reclaimed 因为超时而被回收的次数 STAT items:1:reclaimed 0
expired_unfetched slab内部执行LRU算法清理item对象,过期item未取到的次数 STAT items:1:expired_unfetched 0
evicted_unfetched slab内部执行LRU算法清理item对象,释放item未取到的次数 STAT items:1:evicted_unfetched 0
crawler_reclaimed 过期item对象失效被回收的次数 STAT items:1:crawler_reclaimed 0
crawler_items_checked item回收的次数 STAT items:1:crawler_items_checked 0
lrutail_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.youkuaiyun.com/dailywater/article/details/50783636

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值