通过telnet访问memcached可用命令总结
通过telnet访问memcached服务器
telnet <server> <port>
在下面的文章中 “\r\n”之间的内容是需要在telnet终端里输入的内容
如果memcached服务器返回ERROR或者CLIENT_ERROR,说明是命令没有执行成功,如果服务器返回SERVER_ERROR则说明是memcached服务有问题。
命令分为:
1.检索命令 get、gets
2.存储命令 set、add、replace、append、prepend、cas
3.删除命令 delete
4.递增/递减命令 incr、decr
5.touch
6.统计命令 stats
7.杂项命令 flush_all、version、verbosity、quit
命令格式:<command> <key> <flags> <exptime> <bytes> \r\n<data block>\r\n
一.检索命令
参数:
<key> :需要检索数据的键名
<key>*:一次检索多个键,用空格分开
返回值 :
VALUE <flag> <bytes> \r\n<data>
这些命令有 get gets
1.get a
VALUE a 0 2 aa END
2.gets a b
VALUE a 0 0 3972 VALUE b 0 2 3971 bb END
二.存储命令
参数:
<key> : 缓存数据的键 其长度不能超过250个字符
<flags>: 32位无符号整数(由用户提供),和键要存储的数据一起存储,并在程序get缓存时返回。
<exptime>:过期时间(单位为秒),0 表示永远不过期,可使用 unix 时间戳格式或距离当前时间的秒数,设为秒数时不能大于 2592000(30 天)
<bytes> : 存储数据的字节数,当用户希望存储空数据时,<bytes>可以为0
<cas unique> : 是一个与已存数据条目相关的全局唯一的64位数。客户端应该使用"gets"命令返回的该值来进行"cas"更新操作。
[noreply] : 可选项指示服务器不要回送响应。注意:如果请求行格式错误,服务器不一定能可靠地解析"noreply"选项。在此种情况下,它可能会发送错误信息给客户端,如果客户端没有读取该信息的话会带来问题。客户端应该只构造合法的请求。
返回值:
STORED : 存储成功
NOT_STORED : 数据存储失败,可以是由于不符合add或replace的条件,或者项目在删除队列中
EXISTS : 使用cas命令储存的项目已经在上次获取时更改
NOT_FOUND : 项目不存在或已经被删除
命令:
1.Set
在memcached中存储键/值
格式: set <key> <flags> <exptime> <bytes> [noreply]\r\n<value>\r\n
set a 0 900 4
data
STORED
2.Add
同set,但是只有当键中没有数据或健不存在时才能存储。
格式 : add <key> <flags> <exptime> <bytes> [noreply]\r\n<value>\r\n
add b 0 900 2
10
STORED
3.Replace
替换已经存在的键中的数据
格式 : replace <key> <flags> <exptime> <bytes> [noreply]\r\n<value>\r\n
replace a 0 900 2
10
STORED
4.Append
向键中数据后面增加数据
Append 不会改变 <flags> 和 <exptime>,但是要提供这两个参数
格式: append <key> <flags> <exptime> <bytes> [noreply]\r\n<value>\r\n
append a 0 900 2
10
STORED
5.Prepend
向键数数据前面增加数据
同样的prepend不会改变 <flags> 和 <exptime>,但是也要提供这两个参数
格式: prepend <key> <flags> <exptime> <bytes> [noreply]\r\n<value>\r\n
prepend a 0 900 2
10
STORED
6.Cas
当数据从上次获取后没有被其它程序修改过的时候才存储,网上找到一段说明:
如果首先通过get命令获取了一个item,修改了它,然后再把它set回memcached,系统不保证这个item没有被其他进程(process,未必是操作系统中的进程)操作过。memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果使用gets命令查询某个key的item,memcached会返回该item当前值的唯一标识。如果客户端程序覆写了这个item并想把它写回到memcached中,可以通过cas命令把那个唯一标识一起发送给memcached。如果该item存放在memcached中的唯一标识与您提供的一致,写操作将会成功。如果另一个进程在这期间也修改了这个item,那么该item存放在memcached中的唯一标识将会改变,写操作就会失败。
格式 : cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n
cas b 0 900 2 <cas unique>
10
STORED
三。删除命令
参数:
<key> : 要删除的键
[<time>] : 可选,过多久删除,单位是秒
[noreply] : 可选,告诉server不要回送响应
返回值 :
DELETED :删除成功
NOT_FOUND:键值不存在或已删除
Delete
格式: delete <key> [<time>] [noreply]\r\n
delete a
DELETED
四。递增/递减命令
参数 :
<key> : 要操作的键
<value> : 要加或减的值
[noreply] : 可选,告诉server不要回送响应
返回值 :
NOT_FOUND 键/值不存在
<value> 加减后的结果
1.递增 incr
操作的键/值必须存在,因为incr命令不会自动创建键/值。数据应该是64位的无符号整数(以十进制表示),如果数据不是整数,memcached会报错
格式 : incr <key> <value> [noreply]\r\n
get a
11
incr a 12
23
2.递减 decr
与递增一样,键/值必须存在,如果递减后的值小于0,则会显示0
格式: decr <key> <value> [noreply]\r\n
decr key 12
44
五.touch 命令
参数 :
<key> : 操作的键
<exptime> : 过期时间
[noreply] : 可选,告诉server不要回送响应
返回值:
NOT_FOUND 键/值不存在或已经删除
TOUCHED 过期时间更新成功
Touch
touch命令可以直接更新已经存在的键/值的过期时间,而不用读取它
格式 : touch <key> <exptime> [noreply]\r\n
touch key 1800
TOUCHED
六.统计命令
参数 :
<args> : stats 命令的参数。
stats
基本统计信息
显示服务器信息运行时间,版本等
stats reset
清空统计数据
stats malloc
显示内存分配数据
stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)
stats detail [on|off|dump]
设置或者显示详细操作记录
参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)
stats cachedump slab_id limit_num
显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
七。杂项命令
1.Flush_all
这个指令执行后,服务器上所有缓存的数据都被删除,并且返回:OK。flush并不会将items删除,只是将所有的items标记为expired
格式: flush_all [<time>] [noreply]\r\n
flush_all 10
OK
2.Version
返回memcached的版本
格式: version\r\n
version
VERSION 1.4.5
3.Verbosity
设置详细的日志输出级别,总是返回OK(除非加了noreply 参数)
格式: verbosity <level> [noreply]\r\n
verbosity 2
OK
4.Quit
memcached服务器关闭连接。
参考文章:
http://code.google.com/p/memcached/wiki/NewStart
https://github.com/memcached/memcached/blob/master/doc/protocol.txt
http://www.blogjava.net/chhbjh/archive/2012/02/21/370472.html
http://blog.elijaa.org/index.php?post/2010/05/21/memcached-telnet-command-summary