memcache常用操作

Command Description Example
get 读取键值 get mykey
set 设置新键值 set mykey 0 60 5
add 新增键值 add newkey 0 60 5
replace 替换现有值 replace key 0 60 5
append 末尾添加值 append key 0 60 15
prepend 头部添加值 prepend key 0 60 15
incr 递增数值 incr mykey 2
decr 递减数值 decr mykey 5
delete 删除键 delete mykey
flush_all 清除所有数据 flush_all
清除n秒内的数据 flush_all 900
stats 打印所有状态信息 stats
打印内存信息 stats slabs
打印内存信息 stats malloc
高级信息 stats items
  stats detail
  stats sizes
重置状态 stats reset
version 打印服务器(memcached)版本 version
verbosity 日志级别 verbosity
quit 退出telnet控制台 quit

1.telnet请求命令格式

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
a) <command name> 可以是”set”, “add”, “replace”。
“set”表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖。
“add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败。
“replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败

b) <key> 客户端需要保存数据的key。

c) <flags> 是一个16位的无符号的整数(以十进制的方式表示)。
该标志将和需要存储的数据一起存储,并在客户端get数据时返回。
客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。

d) <exptime> 过期的时间。
若为0表示存储的数据永远不过时(但可被服务器算法:LRU 等替换)。
如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。

e) <bytes> 需要存储的字节数(不包含最后的”\r\n”),当用户希望存储空数据时,<bytes>可以为0

f) 最后客户端需要加上”\r\n”作为”命令头”的结束标志。
<data block>\r\n

扫描二维码关注公众号,回复: 6854640 查看本文章

紧接着”命令头”结束之后就要发送数据块(即希望存储的数据内容),最后加上”\r\n”作为此次通讯的结束。

2. telnet响应命令

结果响应:reply
当以上数据发送结束之后,服务器将返回一个应答。可能有如下的情况:

a) “STORED\r\n”:表示存储成功
b) “NOT_STORED\r\n” : 表示存储失败,但是该失败不是由于错误。
通常这是由于”add”或者”replace”命令本身的要求所引起的,或者该项在删除队列之中。

如: set key 33 0 4\r\n
ffff\r\n

3.获取/检查KeyValue
get <key>*\r\n
a) <key>* 表示一个或者多个key(以空格分开)
b) “\r\n” 命令头的结束

结果响应:reply
服务器端将返回0个或者多个的数据项。每个数据项都是由一个文本行和一个数据块组成。当所有的数据项都接收完毕将收到”END\r\n”
每一项的数据结构:
VALUE <key> <flags> <bytes>\r\n
<data block>\r\n

a) <key> 希望得到存储数据的key
b) <falg> 发送set命令时设置的标志项
c) <bytes> 发送数据块的长度(不包含”\r\n”)
d) “\r\n” 文本行的结束标志
e) <data block> 希望接收的数据项。
f) “\r\n” 接收一个数据项的结束标志。

如果有些key出现在get命令行中但是没有返回相应的数据,这意味着服务器中不存在这些项,这些项过时了,或者被删除了
如:get aa
VALUE aa 33 4
ffff
END

4.删除KeyValue:
delete <key> <time>\r\n

a) <key> 需要被删除数据的key
b) <time> 客户端希望服务器将该数据删除的时间(unix时间或者从现在开始的秒数)
c) “\r\n” 命令头的结束

5.检查Memcache服务器状态:
stats\r\n
在这里可以看到memcache的获取次数,当前连接数,写入次数,已经命中率等;

pid : 进程id
uptime :总的运行时间,秒数
time : 当前时间
version : 版本号
……
curr_items : 当前缓存中的KeyValue数量
total_items : 曾经总共经过缓存的KeyValue数量
bytes : 所有的缓存使用的内存量
curr_connections 当前连接数
….
cmd_get : 总获取次数
cmd_set : 总的写入次数
get_hits : 总的命中次数
miss_hits :  获取失败次数
…..
bytes_read : 总共读取的流量字节数
bytes_written : 总的写入流量字节
limit_maxbytes : 最大允许使用的内存量,字节

6.高级缓存细节查看方法:
stats reset
清空统计数据

stats malloc
显示内存分配数据

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 items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)

stats detail [on|off|dump]
设置或者显示详细操作记录

参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)

7.清空所有键值
flush_all
注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。

8、退出
quit\r\n

memcache telnet 维护小结

           memcache作为一款优秀的进程外缓存,常常被运用于高并发系统架构中。这里主要谈谈怎么通过telnet工具,查看memcache运行状况并对其key进行管理维护。假设memcache安装目录:/usr/local/memcached

          
1、启动memcache

[root@localhost ~]# /usr/local/memcached/bin/memcached -d -m 512  -u root -l 192.168.119.70 -p 12000 -c 512 -P /usr/local/memcached/memcached.pid

启动参数详解
 -d:以守护进程方式启动。如果该参数没有指定,当按ctrl+c命令结束,memcache自动关闭
 -m:分配给memcache使用的最大内存数 单位是m,默认是64m
 -u: 指定运行memcache的用户
 -l: 指定监听的ip地址
 -p: 指定监听的tcp端口号,可以通过-u指定udp端口.默认是11211
 -c: 最大并发连接数
 -P: 报错进程id的文件
 memcache 启动之后,我们就可以通过telnet连接memcache,对其进行简单操作管理。

2、telnet连接memcache

[root@localhost ~]# telnet 192.168.119.70 12000 
Trying 192.168.119.70...
Connected to 192.168.119.70 (192.168.119.70).
Escape character is '^]'. 

 连接成功之后,即可对memcache进行操作管理了,常用的命令有:

Ⅰ、添加修改

        命令格式:<command> <key> <flags> <exptime> <bytes>\r\n<data block>\r\n

       <command>:add, set或 replace

       <key> :缓存的名字

       <flag>:16位无符号整数,和key要存储的数据一起存储,并在程序get缓存时,返回。

      <exptime>:过去时间,0 表示永远不过期,如果非零,表示unix时间或距此秒数

       <bytes>:存储数据的字节数

        \r\n: 表示换行回车

        命令结果:

                STORED :表示成功

                NOT_STORED : 表示失败 

a)、添加缓存

add id 1 0 4
1234
STORED

         如果key已经存在,则会添加失败。

b)、修改缓存

replace id 1 0 4
3456
STORED

     key存在时,成功;不存在时,失败。

c)、设置缓存

set id 1 0 4
2345
STORED

    key不存在时,添加【add】;已存在时,替换【replace】。

Ⅱ、读取

       命令格式:get <key>+\r\n

       <key>+:表示一个或多个key,多个key时,用空格隔开

a)、读取单个key的缓存

get id
VALUE id 1 4
1234
END

 b)、读取多个key的缓存

get id name
VALUE id 1 4
3456
VALUE name 1 3
jim
END

Ⅲ、删除

命令格式:delete <key> \r\n

<key>:要删除的key

删除id

delete id 
DELETED

Ⅳ、清空所有缓存

命令格式:flush_all

flush_all
OK

Ⅴ、查看缓存服务器状态

命令:stats

stats
STAT pid 2711     //进程id
STAT uptime 2453  //总的运行时间,单位描述
STAT time 1344856333  //当前时间
STAT version 1.4.0 //版本
STAT pointer_size 32    //服务器指针位数,一般32位操作系统是32
STAT rusage_user 0.002999  //进程的累计用户时间 
STAT rusage_system 1.277805  //进程的累计系统事件
STAT curr_connections 1  //当前连接数
STAT total_connections 11  //服务器启动后,总连接数
STAT connection_structures 11  //连接结构的数量
STAT cmd_get 17   //总获取次数
STAT cmd_set 1  //总写入次数
STAT cmd_flush 1   //总的的清空次数
STAT get_hits 1  //总的命中次数
STAT get_misses 7   //获取没有命中次数
STAT delete_misses //删除没有命中次数
STAT delete_hits 4   //删除命中次数
STAT incr_misses //递增操作没有命中次数 
STAT incr_hits //递增操作命中次数
STAT decr_misses //递减操作没有命中的次数
STAT decr_hits //递减操作命中的次数
STAT cas_misses //cas设置没有命中次数
STAT cas_hits //cas命中次数
STAT cas_badval //cas操作找到key,但版本过期,没有设置成功
STAT bytes_read 455    //总共获取数据量
STAT bytes_written 1175  //总共写入数据量
STAT limit_maxbytes 1048576  //最大允许使用内存,单位字节
STAT accepting_conns 1    
STAT listen_disabled_num 0
STAT threads 5   //当前线程数
STAT conn_yields 0
STAT bytes 56      //已用缓存空间
STAT curr_items 1  //当前缓存的keyvalue数
STAT total_items 7 //总共缓存的keyvalue数,包括过期删除的
STAT evictions //通过删除keyvalue,释放内存次数
END

Ⅵ、打印版本

命令:version

version
VERSION 1.4.0

Ⅶ、打印内存信息

命令:stats slabs

stats slabs
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 1
STAT 1:free_chunks 1
STAT 1:free_chunks_end 13105
STAT 1:get_hits 10
STAT 1:cmd_set 10
STAT 1:delete_hits 4
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT active_slabs 1
STAT total_malloced 1048560
END

3、退出telnet 

quit

memcached telnet相关操作

elnet localhost 11211
//保存
set good 32 0 10
helloworld
STORED

//取回
gets good
VALUE good 32 10 10
helloworld
END

//替换
replace good 32 0 10
worldhello
STORED
get good
VALUE good 32 10
worldhello
END

//尾部添加
append good 32 0 5
after
STORED
get good
VALUE good 32 15
worldhelloafter
END

//头部添加
prepend good 32 0 6
before
STORED
get good
VALUE good 32 21
beforeworldhelloafter
END

//删除
delete good
DELETED
get good
END


delete good
NOT_FOUND


cas good 32 0 10 hel
helloworld
EXISTS

gets good
VALUE good 32 10 10
helloworld
END


cas bad 32 0 10 good
worldhello
NOT_FOUND

参考文章:

memcache在telnet下的命令操作 

memcache telnet 维护总结 

memcache telnet 使用命令

memcached全面剖析–PDF总结篇   *值得多次阅读

关于Memcached的一些事之memcached特征

Memcached二三事儿

查看、分析memcached使用状态

猜你喜欢

转载自www.cnblogs.com/52py/p/11236166.html