Memcached学习笔记之二:Memcached存储命令(set,add,replace,append,prepend,cas)

Memcached 的存储命令包括:set 、add 、replace 、append 、prepend 、cas 。

主要是用于向memcached服务器上添加缓存数据,几个命令的语法及其参数基本一致。

首先来了解下命令格式及其含义: 以set命令为例

set key flags exptime bytes [noreply]

value

第一行:set key flags exptime bytes [noreply]

set : 命令
key:key 用于查找缓存值
flags:一个32位的标志值,客户机使用它存储关于键值对的额外信息(譬如用户规定1-json , 2-xml )用户自己的业务标记使用场景 ,比如, 我可以设置为1缓存的是网页的热点,2缓存的是app的热点。
exptime :在缓存中保存键值对的时长(以秒为单位,0表示永远)(服务器挂了数据没了 最多30天时间,因为memcached没有提供持久化的功能)
bytes:在缓存中存储的字节数(与存储的值不对应CLIENT_ERROR bad data chunk)存储的字节数一定要与实际存储值得字节数对应,否则无法存入报错CLIENT_ERROR bad data chunk  比如存入值3字节则值bytes为3值例如ksf

noreply:可选参数,可以在命令的第一行后面加入noreply,以避免在处理交互命令的时候,等待服务端的返回。

第二行:value:存储的值(始终位于第二行)。

 

 

1. set 命令

  用于将value(数据值)存储到指定的key(键)中。如果该key已经存在,则会用新的value值替换旧value值,也就是可以实现更新的操作。

  语法:  set key flags exptime bytes [noreply]

       value

  参数说明

    key : 键值对 key-value 中的key,用于以此查找存储的value。

    flags : 可以包括键值对的整形参数,客户机使用它存储关于键值对的额外信息。

    exptime : 在缓存中保存键值对的时间长度(以秒为单位,0表示永远)。

    bytes : 在缓存中存储的字节数。

    noreply(可选参数) : 该参数告知服务器不需要返回数据。

    value : 存储的值,始终位于第二行。

  输出:

     STORED : 保存成功后的输出。

     ERROR : 保存失败后的输出。

  栗子:  

    set name 0 900 6

    justin

    STORED

    

    get name

    VALUE name 0 6

    justin

    END

 

2. add 命令

  用于将value存储在指定的key中,若key存在,则不会更新数据。

  语法:  add key flags exptime bytes [noreply]

       value

  参数说明:同set。

  输出:  STORED : 替换成功后输出。

       NOT_STORED : 替换失败后输出。

  与set的区别

    (1) 若key存在,set命令会做更新操作;而add命令则不会更新数据,即之前值保持不变,并得到响应:NOT_STORED.

    (2)语法上一致,除了一个是set开头,一个是add开头。

    (3)保存失败后的输入不同,set返回ERROR,而add返回NOT_STORED。

 

3. replace 命令

  用于替换已存在的key的value值,若key不存在,则替换失败,并得到响应:NOT_STORED。

  语法: replace key flags exptime bytes [noreply]

      value

  参数说明 :同set

  输出:  STORED : 替换成功后输出。

       NOT_STORED : 替换失败后输出。

 

4.  append 命令

  用于向已存在key的value值后面追加数据。

  语法: append keys flags exptime bytes [noreply]

      value

  参数说明:同set。

  输出:   STORED:保存成功后输出。

      NOT_STORED:该键在 Memcached 上不存在。

  •       CLIENT_ERROR:执行错误。

5. prepend 命令

  用于向已存在的key的value值前面追加数据。

  语法: prepend keys flags exptime bytes [noreply]

      value

  参数说明:同set。

  输出:   STORED:保存成功后输出。

      NOT_STORED:该键在 Memcached 上不存在。

      CLIENT_ERROR:执行错误。

 

6. cas 命令 

  Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作,

  它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。

  检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。

  --就像是给这个key-value键值对设置一个“版本”标识符。

  --说白了就是版本控制,检查和更新,只有从你读取数据后,别人没有更新这个数据,才能够正确保存。通常和gets配合使用必须等于当前的版本才能更新小于大于都不行.原子性操作

 

  语法: cas key flags exptime bytes unique_cas_token [noreply]

      value

  参数说明:

    unique_cas_token : 这个是通过gets命令获得的一个唯一64位值。

    其他参数同set。

  输出

   STORED:保存成功后输出。

   ERROR:保存出错或语法错误。

   EXISTS:在最后一次取值后另外一个用户也在更新该数据。

   NOT_FOUND:Memcached 服务上不存在该键值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      

posted @ 2017-04-26 15:27  素手揽清风  阅读(518)  评论(0编辑  收藏  举报