• Memcached学习(二)


    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] 、

        cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]

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

        append与prepend操作不接受flags或exptime参数

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

            

    • 获取数据
      • get <key>*
      • gets <key>*

         这两个命令的唯一区别是,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]   根据key值从memcached中删除键值对数据
      • flush_all                          将memcached中所有键值对都删除
    • 增值、减值操作
      • incr <key> <value> [noreply]   
      • decr <key> <value> [noreply]

        这两个操作成功的前提都是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]

        touch指令用于更新已有条目的超时时间,而不需要取出该条目的内容,其中的exptime的意义与保存命令操作的exptime参数一样

  • 相关阅读:
    【JavaScript框架封装】实现一个类似于JQuery的动画框架的封装
    【JavaScript框架封装】实现一个类似于JQuery的DOM框架的封装
    【JavaScript框架封装】实现一个类似于JQuery的内容框架的封装
    【JavaScript框架封装】实现一个类似于JQuery的属性框架的封装
    【JavaScript框架封装】实现一个类似于JQuery的选择框架的封装
    【JavaScript框架封装】实现一个类似于JQuery的CSS样式框架的封装
    【JavaScript框架封装】实现一个类似于JQuery的事件框架的封装
    【JavaScript框架封装】在实现一个自己定义类似于JQuery的append()函数的时候遇到的问题及解决方案
    【JavaScript框架封装】在实现一个自己定义类似于JQuery的append()函数的时候遇到的问题及解决方案
    【JavaScript框架封装】公共框架的封装
  • 原文地址:https://www.cnblogs.com/jadic/p/3619146.html
Copyright © 2020-2023  润新知