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

[经验分享] Memcached学习(二)

[复制链接]

尚未签到

发表于 2015-9-1 12:43:20 | 显示全部楼层 |阅读模式
  4.协议简介

  • Memcached服务与各客户端间通过Tcp链接通讯(也可通过Udp链接)。
  各客户端间与服务间不需要发送特别的命令关闭链接,只要在不需要的时候直接关闭链接即可。建议客户端与服务间保持长连接,否则就失去了Memcached的优势,毕竟每次使用时再链接还是比较耗时的。

  • Memcached现主要有两种协议方式,文本协议、二进制流协议。
  Memcached早期使用的是简单的文本协议,后来扩展了二进制流协议(文本解析耗费较多时间),在统一的协议格式下,原来很多的文本都约定为某些特定字节,如set关键字我可约定为01表示等待。


  Memcached现在的键长最多为250字节,且当中不能含有空格和其他特殊的控制字符如tab、回车等。

  • 命令
  大类主要分为三种:保存命令、获取命令、其他命令。命令都是小写且大小写敏感。

  • 超时时间
  有些命令操作时会添加超时时间参数,参数的值一般有两种,一是绝对时间值,Unix时间(1970.1.1开始计时的,32位整数表示),另一种是相对时间值即从当前时间开始计的秒数。
  但后一种方式的超时时间值不能超过60*60*24*30(即30天),如果超过这个值,则会被当做是绝对时间值。
  
  5.常用命令
  以下命令示例都是以通过telnet链接Memcached方式演示.

  • 保存数据
  命令格式:
  <command name> <key> <flags> <exptime> <bytes> [noreply]\r\n、
  cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n



    • add       仅当存储空间中不存在键相同的数据时才保存
    • replace      仅当存储空间中存在键相同的数据时才保存
    • set            与add和replace不同,无论何时都保存
    • append  向已存在键的对应值后追加数据
    • prepend   向已存在键的对应值前加入数据     

  append与prepend操作不接受flags或exptime参数
  cas (check and set)它是一个检查并设置的操作,对本次数据存储的前提是从上次取过数据以后没有被修改过。
  

  • 获取数据




    • get <key>*\r\n
    • gets <key>*\r\n

  这两个命令的唯一区别是,gets会比get多返回一个用于标识cas操作的。
  示例:
  存入键位"name",值为"jadic"的操作命令
  set name 0 0 5
  jadic
  服务端响应
  stored
  现想取出name的值,操作命令
  get name
  服务端响应
  VALUE name 0 5
  jadic
  END
  如果通过gets命令操作,
  gets name
  服务端响应
  VALUE name 0 5 2
  jadic
  END
  可以看到gets命令返回的操作比get命令多返回了一个2,这个2就是set name操作时memcached自动生成的一个用于4字节长的数字,可通过gets命令获取,这个值
  可用于cas 操作,如现在有如下操作:
  cas name 0 0 6 2
  jadic2
  服务端响应
  stored
  上述的这个cas操作就表示,现在要把name的内容改为jadic2,但成功的前提是从上次gets name内容后,这个内容没有被修改过,其中cas命令行中最后的2即是
  gets操作时返回的值。
  

  • 删除数据

    • delete <key> [noreply]\r\n   根据key值从memcached中删除键值对数据
    • flush_all                          将memcached中所有键值对都删除

  

  • 增值、减值操作

    • incr <key> <value> [noreply]\r\n  
    • decr <key> <value> [noreply]\r\n

  这两个操作成功的前提都是key所对应的值存入的是4字节的数字,否则都会返回失败提示,如下示例:
set id 0 0 5 //设置id的内容为12345
12345
STORED
incr id 4  //id增加4
12349   //服务端直接返回增加后的值
decr id 3   //id的值减去3 
12346    //同样,直接返回减值操作以后的值
set name 0 0 3  //name值内容为"ab1"
ab1
STORED
incr name 1    //执行加1操作,因为值内容不是数字型,所以服务端直接返回错误提示
CLIENT_ERROR cannot increment or decrement non-numeric value
decr name 2    //与增值操作一样,因为值内容不是数字型,所以服务端直接返回错误提示
CLIENT_ERROR cannot increment or decrement non-numeric value
incr abc 1    //因为缓存中没有键为abc的条目,所以会提示未找到,decr同理。
NOT_FOUND

  • Touch
  touch <key> <exptime> [noreply]\r\n
  touch指令用于更新已有条目的超时时间,而不需要取出该条目的内容,其中的exptime的意义与保存命令操作的exptime参数一样
  
  
  

运维网声明 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-108360-1-1.html 上篇帖子: memcached启动 安装 下篇帖子: 传统MySQL+ Memcached架构遇到的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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