<span style="font-size:16px;">通过telnet访问memcached服务器</span>

<span style="font-size:16px;">telnet   <server> <port></span>

<span style="font-size:16px;">在下面的文章中 “rn”之间的内容是需要在telnet终端里输入的内容</span>

<span style="font-size:16px;">如果memcached服务器返回ERROR或者CLIENT_ERROR,说明是命令没有执行成功,如果服务器返回SERVER_ERROR则说明是memcached服务有问题。</span>
<p>

<span style="font-size:16px;">命令分为:</span> 

</p>

<p> <span style="font-size:16px;">1.检索命令 get、gets </span> </p> <p> <span style="font-size:16px;">2.存储命令 set、add、replace、append、prepend、cas </span> </p> <p> <span style="font-size:16px;">3.删除命令 delete</span> </p> <p> <span style="font-size:16px;"> 4.递增/递减命令 incr、decr</span> </p> <p> <span style="font-size:16px;">5.touch  </span> </p> <p> <span style="font-size:16px;">6.统计命令 stats </span> </p> <p> <span style="font-size:16px;">7.杂项命令 flush_all、version、verbosity、quit</span> </p> <span style="font-size:16px;">命令格式:<command> <key> <flags> <exptime> <bytes>  rn<data block>rn</span>

<h2>

<span style="font-size:16px;">一.检索命令</span> 

</h2>
<span style="font-size:16px;">参数:</span>

<span style="font-size:16px;"><key> :需要检索数据的键名</span>
<span style="font-size:16px;"><key>*:一次检索多个键,用空格分开</span>
<span style="font-size:16px;">返回值 :</span>

<span style="font-size:16px;">VALUE <flag> <bytes> rn<data> </span>
<span style="font-size:16px;">这些命令有 get gets</span>
<span style="font-size:16px;">1.get a</span>

<span style="font-size:16px;">VALUE a 0 2</span> <span style="font-size:16px;">aa</span> <span style="font-size:16px;">END</span>

<span style="font-size:16px;">2.gets a b</span>

<span style="font-size:16px;">VALUE a 0 0 3972</span> <span style="font-size:16px;">VALUE b 0 2 3971</span> <span style="font-size:16px;">bb</span> <span style="font-size:16px;">END</span>

<h2>

<span style="font-size:16px;">二.存储命令</span> 

</h2>
<span style="font-size:16px;">参数:</span>

<span style="font-size:16px;"><key>  : 缓存数据的键 其长度不能超过250个字符</span>

<span style="font-size:16px;"><flags>: 32位无符号整数(由用户提供),和键要存储的数据一起存储,并在程序get缓存时返回。</span>

<span style="font-size:16px;"><exptime>:过期时间(单位为秒),0 表示永远不过期,可使用 unix 时间戳格式或距离当前时间的秒数,设为秒数时不能大于 2592000(30 天)</span>

<span style="font-size:16px;"><bytes> : 存储数据的字节数,当用户希望存储空数据时,<bytes>可以为0</span>

<span style="font-size:16px;"><cas unique> :  是一个与已存数据条目相关的全局唯一的64位数。客户端应该使用"gets"命令返回的该值来进行"cas"更新操作。</span>

<span style="font-size:16px;">[noreply]  : 可选项指示服务器不要回送响应。注意:如果请求行格式错误,服务器不一定能可靠地解析"noreply"选项。在此种情况下,它可能会发送错误信息给客户端,如果客户端没有读取该信息的话会带来问题。客户端应该只构造合法的请求。</span>



<span style="font-size:16px;">返回值:</span>

<span style="font-size:16px;">STORED  : 存储成功</span>

<span style="font-size:16px;">NOT_STORED  : 数据存储失败,可以是由于不符合add或replace的条件,或者项目在删除队列中</span>

<span style="font-size:16px;">EXISTS  : 使用cas命令储存的项目已经在上次获取时更改</span>

<span style="font-size:16px;">NOT_FOUND : 项目不存在或已经被删除</span>



<span style="font-size:16px;">命令:</span>

<span style="font-size:16px;">1.Set</span>

   <span style="font-size:16px;">在memcached中存储键/值</span>

<span style="font-size:16px;">格式: set <key> <flags> <exptime> <bytes> [noreply]rn<value>rn</span>

<span style="font-size:16px;">set a 0 900 4</span>
<span style="font-size:16px;">data</span>
<span style="font-size:16px;">STORED</span>

<span style="font-size:16px;">2.Add</span>

     <span style="font-size:16px;">同set,但是只有当键中没有数据或健不存在时才能存储。</span>

<span style="font-size:16px;">格式 : add <key> <flags> <exptime> <bytes> [noreply]rn<value>rn</span>

<span style="font-size:16px;">add b 0 900 2</span>
<span style="font-size:16px;">10</span>
<span style="font-size:16px;">STORED</span>

<span style="font-size:16px;">3.Replace</span>

     <span style="font-size:16px;">替换已经存在的键中的数据 </span>

<span style="font-size:16px;">格式 : replace <key> <flags> <exptime> <bytes> [noreply]rn<value>rn</span>

<span style="font-size:16px;">replace a 0 900 2</span>
<span style="font-size:16px;">10</span>
<span style="font-size:16px;">STORED</span>

<span style="font-size:16px;">4.Append</span>

     <span style="font-size:16px;">向键中数据后面增加数据</span>

<span style="font-size:16px;">Append 不会改变 <flags> 和 <exptime>,但是要提供这两个参数</span>

<span style="font-size:16px;">格式: append <key> <flags> <exptime> <bytes> [noreply]rn<value>rn</span>

<span style="font-size:16px;">append a 0 900 2</span>
<span style="font-size:16px;">10</span>
<span style="font-size:16px;">STORED</span>

<span style="font-size:16px;">5.Prepend</span>

     <span style="font-size:16px;">向键数数据前面增加数据</span>

<span style="font-size:16px;">同样的prepend不会改变 <flags> 和 <exptime>,但是也要提供这两个参数</span>

<span style="font-size:16px;">格式: prepend <key> <flags> <exptime> <bytes> [noreply]rn<value>rn</span>

<span style="font-size:16px;">prepend a 0 900 2</span>
<span style="font-size:16px;">10</span>
<span style="font-size:16px;">STORED</span>

<span style="font-size:16px;">6.Cas</span>

<span style="font-size:16px;">    当数据从上次获取后没有被其它程序修改过的时候才存储,网上找到一段说明:</span>

<span style="font-size:16px;">如果首先通过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中的唯一标识将会改变,写操作就会失败。</span>



<span style="font-size:16px;">格式 : cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]rn</span>

<span style="font-size:16px;">cas b 0 900 2 <cas unique></span>
<span style="font-size:16px;">10</span>
<span style="font-size:16px;">STORED</span>

<h2>

<span style="font-size:16px;">三。删除命令</span> 

</h2>
<span style="font-size:16px;">参数:</span>

<span style="font-size:16px;"><key> : 要删除的键</span>

<span style="font-size:16px;">[<time>] : 可选,过多久删除,单位是秒</span>

<span style="font-size:16px;">[noreply] : 可选,告诉server不要回送响应</span>



<span style="font-size:16px;">返回值 :</span>

<span style="font-size:16px;">DELETED  :删除成功</span>

<span style="font-size:16px;">NOT_FOUND:键值不存在或已删除</span>



<span style="font-size:16px;">Delete</span>



<span style="font-size:16px;">格式: delete <key> [<time>] [noreply]rn</span>


<span style="font-size:16px;">delete a</span>
<span style="font-size:16px;">DELETED</span>



<h2>

<span style="font-size:16px;">四。递增/递减命令</span> 

</h2>
<span style="font-size:16px;">参数 :</span>

<span style="font-size:16px;"><key> :  要操作的键</span>

<span style="font-size:16px;"><value> : 要加或减的值</span>

<span style="font-size:16px;">[noreply] : 可选,告诉server不要回送响应</span>



<span style="font-size:16px;">返回值 :</span>

<span style="font-size:16px;">NOT_FOUND 键/值不存在</span>

<span style="font-size:16px;"><value>  加减后的结果</span>



<span style="font-size:16px;">1.递增 incr</span>

     <span style="font-size:16px;">操作的键/值必须存在,因为incr命令不会自动创建键/值。数据应该是64位的无符号整数(以十进制表示),如果数据不是整数,memcached会报错</span>

<span style="font-size:16px;">格式 : incr <key> <value> [noreply]rn</span>

<span style="font-size:16px;">get a</span>
<span style="font-size:16px;">11</span>
<span style="font-size:16px;">incr a 12</span>
<span style="font-size:16px;">23</span>



<span style="font-size:16px;">2.递减 decr</span>



<span style="font-size:16px;">与递增一样,键/值必须存在,如果递减后的值小于0,则会显示0</span>

<span style="font-size:16px;">格式: decr <key> <value> [noreply]rn</span>

<span style="font-size:16px;">decr key 12</span>
<span style="font-size:16px;">44</span>



<h2>

<span style="font-size:16px;">五.touch 命令</span> 

</h2>
<span style="font-size:16px;">参数 :</span>

<span style="font-size:16px;"><key> : 操作的键</span>

<span style="font-size:16px;"><exptime> : 过期时间</span>

<span style="font-size:16px;">[noreply] : 可选,告诉server不要回送响应</span>



<span style="font-size:16px;">返回值:</span>

<span style="font-size:16px;">NOT_FOUND 键/值不存在或已经删除</span>

<span style="font-size:16px;">TOUCHED    过期时间更新成功</span>



<span style="font-size:16px;">Touch</span>

<span style="font-size:16px;">touch命令可以直接更新已经存在的键/值的过期时间,而不用读取它</span>

<span style="font-size:16px;">格式 : touch <key> <exptime> [noreply]rn</span>

<span style="font-size:16px;">touch key 1800</span>
<span style="font-size:16px;">TOUCHED</span>



<h2>

<span style="font-size:16px;">六.统计命令</span> 

</h2>
<span style="font-size:16px;">参数 :</span>

<p>

<span style="font-size:16px;">&lt;args&gt; : stats 命令的参数。</span>

</p>
<p>

<br />

</p>
<p>

<span style="font-size:16px;"><strong>stats</strong></span> 

</p>
<span style="font-size:16px;">基本统计信息</span>

<span style="font-size:16px;">显示服务器信息运行时间,版本等</span>



<span style="font-size:16px;">stats reset</span>

<span style="font-size:16px;">清空统计数据</span>



<span style="font-size:16px;">stats malloc</span>

<span style="font-size:16px;">显示内存分配数据</span>



<span style="font-size:16px;">stats slabs</span>

<span style="font-size:16px;">显示各个slab的信息,包括chunk的大小、数目、使用情况等</span>



<span style="font-size:16px;">stats items</span>

<span style="font-size:16px;">显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)</span>



<span style="font-size:16px;">stats detail [on|off|dump]</span>

<span style="font-size:16px;">设置或者显示详细操作记录</span>



<span style="font-size:16px;">参数为on,打开详细操作记录</span>

<span style="font-size:16px;">参数为off,关闭详细操作记录</span>

<span style="font-size:16px;">参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)</span>



<span style="font-size:16px;">stats cachedump slab_id limit_num</span>

<span style="font-size:16px;">显示某个slab中的前limit_num个key列表,显示格式如下</span>

<span style="font-size:16px;">ITEM key_name [ value_length b; expire_time|access_time s]</span>



<h2>

<span style="font-size:16px;">七。杂项命令</span> 

</h2>
<span style="font-size:16px;">1.Flush_all</span>

      <span style="font-size:16px;">这个指令执行后,服务器上所有缓存的数据都被删除,并且返回:OK。flush并不会将items删除,只是将所有的items标记为expired</span>

<span style="font-size:16px;">格式: flush_all [<time>] [noreply]rn</span>


<span style="font-size:16px;">flush_all 10</span>
<span style="font-size:16px;">OK</span>

<span style="font-size:16px;">2.Version</span>

<span style="font-size:16px;">返回memcached的版本</span>

<span style="font-size:16px;">格式: versionrn</span>

<span style="font-size:16px;">version</span>
<span style="font-size:16px;">VERSION 1.4.5</span>

<span style="font-size:16px;">3.Verbosity</span>

<span style="font-size:16px;">设置详细的日志输出级别,总是返回OK(除非加了noreply 参数)</span>

<span style="font-size:16px;">格式: verbosity <level> [noreply]rn</span>

<span style="font-size:16px;">verbosity 2</span>
<span style="font-size:16px;">OK</span>

<span style="font-size:16px;">4.Quit</span>

<p>

<span style="font-size:16px;">memcached服务器关闭连接。</span> 

</p>
<p>

<br />

</p>
<p>

参考文章:

</p>
<p>

http://code.google.com/p/memcached/wiki/NewStart<br />

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
</p>