设为首页 收藏本站
查看: 676|回复: 0

[经验分享] memcached命令解析

[复制链接]

尚未签到

发表于 2015-9-1 07:12:08 | 显示全部楼层 |阅读模式
memcached命令  


    • 标准协议

      • No Reply

    • 存储命令

      • set命令
      • add命令
      • replace命令
      • append命令
      • prepend命令
      • cas命令

    • 读取命令

      • get命令
      • gets命令

    • 删除命令
    • incr/decr命令
    • 查看memcached使用状态

      • stats命令
      • stats items命令
      • stats slabs命令
      • stats sizes命令

    • flush_all命令

  全部协议在Protocol Documentation中
       标准协议
  memcached所有的标准协议包含在对item执行命令过程中,一个item包含:


  • 一个key
  • 一个32位的标志值
  • 以秒为单位的失效时间
  • 一个64为的CAS值,这个是唯一的
  • 数据
  CAS是可选的,可以使用“
  -C
  ”禁止CAS。
    No Reply
  大多数ascii命令允许“noreply”。建议大家在ascii协议下别用“noreply”,因为那样不会报请求错误。“noreply”的目的是在执行交互命令(如:set、add)后,避免等待返回的包。
  二进制协议将“noreply”定义为声明。如果你的客户端支持或者使用二进制协议,那么你将会用到它。
     存储命令

  首先客户端向服务器按照如下格式发送命令行:
  <command  name> <key> <flags> <exptime>  <bytes>\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
         紧接着"命令头"结束之后就要发送数据块(即希望存储的数据内容),最后加上"\r\n"作为此次通讯的结束。
  
  

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

      a)  "STORED\r\n"
           表示存储成功
  

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

set
  set是保存数据命令。会覆盖已存在的数据,而新数据将在LRU顶端
add
  只有在该数据不存在时才保存该数据。如果是新加入的item,那么将其直接放在LRU顶端;如果item已经存在导致add失败,那么将这个item从LRU链表上摘下再放到LRU顶端。
replace
  替换已经存在的数据。 这个操作几乎用不到。
append
  紧接着已经存在的item增加item。这个操作不允许增加原来的item限制,对管理链表很有用。
prepend
  与append命令类似,这个命令是在已存在的数据前加入新数据。
cas
  
  检查并存储(
Check  And Set)或者比较并更新(Compare And Swap)。如果从上次读取到现在没有更新,那么存入数据,处理更新竞争很有用。      读取命令

  获取数据的格式:
  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
  读取命令, 更具一个或多个key查找数据,并返回所找到的数据。
gets
  使用CAS的get命令,返回的item带有一个CAS标识符  (一个唯一的64位数)。使用cas命令返回数据。如果得到的item的cas值被更改了,这个数据将不会被保存。
     删除命令
  如果存在,将item从cache中删除,
  delete 命令格式:
  delete  <key> <time>\r\n
       a) <key>  需要被删除数据的key
        b) <time>  客户端希望服务器将该数据删除的时间(unix时间或者从现在开始的秒数)
        c) "\r\n"  命令头的结束
  

  reply
  

    a) "DELETED\r\n"  删除成功
        b) "NOT_FOUND\r\n"  需要删除的key不存在
  
      incr/decr
  Increment and Decrement.  如果item是以64为整型存储的,那么可以使用incr和decr命令修改那个数。
  如果数据不存在,那么将返回失败。
  命令格式:
  
    incr  <key> <value>\r\n
    
  
    or
     
  
  
    decr  <key> <value>\r\n
       
        a)  <key> 数据项的key
        b)  <value> 用户希望增加/减少的数据的数值.该数值是一个32位十进制的无符号整形变量。
      c)  "\r\n" 命令行结束标志
  

  reply
      a)  "NOT_FOUND\r\n" 没有找到需要操作的项。
  
        b)  "<value>\r\n" <value>数据项有效期的最新剩余时间。
  

    注意:
      a)  如果一个数据项的有效期被设置为0,这时使用decr命令是无法减少数据。
  
        b) 如果要执行  incr key -1 的操作不会有什么问题,结果和你希望的一样。但是,执行decr  -1时的结果一定会让你觉得很意外,因为它的结果无论key的数据是什么结果的都是0.原因是:在这两个命令的执行过程中都是吧-1当做一个无符号的整形处理的。
    
  
      c)  执行decr命令时数据的长度不会随之而减小,而是在返回数据的后面填补空格。但是执行incr命令越界后会自动的增加数据的位数。
     
        查看memcached使用状态
  通过这些命令可以查看memcached服务器的使用状态。
stats
  查看memcached状态的基本命令,通过这个命令可以看到如下信息:
  STAT pid 22459                             进程ID
STAT  uptime 1027046                        服务器运行秒数
STAT time 1273043062                        服务器当前unix时间戳
STAT version 1.4.4                          服务器版本
STAT pointer_size 64                        操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.040000                  进程累计用户时间
STAT  rusage_system 0.260000                 进程累计系统时间
STAT curr_connections 10                   当前打开连接数
STAT  total_connections 82                  曾打开的连接总数
STAT connection_structures 13               服务器分配的连接结构数
STAT cmd_get 54                             执行get命令总数
STAT cmd_set 34                            执行set命令总数
STAT  cmd_flush 3                           指向flush_all命令总数
STAT get_hits 9                             get命中次数
STAT get_misses 45                          get未命中次数
STAT delete_misses 5                       delete未命中次数
STAT  delete_hits 1                         delete命中次数
STAT incr_misses 0                          incr未命中次数
STAT incr_hits 0                            incr命中次数
STAT decr_misses 0                         decr未命中次数
STAT  decr_hits 0                           decr命中次数
STAT cas_misses 0    cas未命中次数
STAT  cas_hits 0                            cas命中次数
STAT cas_badval 0                           使用擦拭次数
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read  15785                      读取字节总数
STAT bytes_written 15222                    写入字节总数
STAT limit_maxbytes 1048576                分配的内存数(字节)
STAT  accepting_conns 1                     目前接受的链接数
STAT listen_disabled_num 0                  
STAT threads 4                             线程数
STAT  conn_yields 0
STAT bytes 0                               存储item字节数
STAT  curr_items 0                          item个数
STAT total_items 34                         item总数
STAT evictions 0                            为获取空间删除item的总数



stats items
  输出各个slab中的item信息。s
stats slabs
  输出slab中更详细的item信息
stats sizes
  输出所有item的大小和个数
  stats cachedump <slab_id> <limit_num>



根据<slab_id>输出相同的<slab_id>中的item信息。<limit_num>是输出的个数,当<limit_num>为0是输出所有的item。      flush_all
  使在内存中所有的item失效。加入参数则表示在N秒后失效所有item。这项操作会立即返回,不会暂停服务器。这个操作并不会真的释放内存空间,而是标志所有的item为失效
转自:http://blog.chinaunix.net/u1/45336/showart_2227790.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108066-1-1.html 上篇帖子: linux 下安装 memcached 及 memcacheq 下篇帖子: Windows和Linux环境下Memcached安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表