Memcached:03---存储命令(set、add、replace、append、prepend、cas)

一、set

  • set命令用于将value(数据值)存储在指定的key(键)中。
  • 如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

格式

  • 格式如下:
set key flags exptime bytes [noreply] 
value 
  • 参数如下:
    • key:键值 key-value 结构中的 key,用于查找缓存值
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
  • flags参数:
    • memcached基于文本协议,传输的东西,理解成字符串来存储。
    • 例如,让你存一个php对象,和一个php数组,怎么办?可以序列化成字符串,往出取的时候,自然还要反序列化成 对象/数组/json格式等等。这时候,flag的意义就体现出来了。比如,1就是字符串,2反转成数组,3反序列化对象....
  • exptime参数,设置缓存的有效期,有3种格式:
    • 设为秒数,从设定开始数,第n秒后失效
    • 设为时间戳,到指定的时间戳后失效。比如在团购网站,缓存的某团到中午12:00失效。add key 0 1379209999 6
    • 设为0。不自动失效。
  • exptime参数的注意事项:有种误会,设为0永久有效,这是错误的。
    • 1:编译memcached时,指定一个最长常量,默认是 30 天。所以即使设为0,30天后也会失效。
    • 2:可能等不到30天,就会被新数据挤出去。

输出信息

  • STORED:保存成功。
  • ERROR:保存失败。

演示案例

  • 输入如下的命令设置一个key,意义如下:
    • key:runoob
    • flag:0
    • exptime:60
    • bytes:9
    • value:memcached
set runoob 0 60 9
memcached

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 在60秒之内获取key的值:
get runoob

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 在60秒之后获取key的值:
get runoob

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

二、add

  • add命令用于将value(数据值)存储在指定的key(键)中。
  • 如果add的key已经存在,则不会更新数据(过期的key会更新),之前的值将仍然保持相同,并且将获得响应NOT_STORED

格式

 

add key flags exptime bytes [noreply]
value
  • 参数说明如下:
    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)。
    • bytes:在缓存中存储的字节数。
    • noreply(可选):该参数告知服务器不需要返回数据。
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)。

输出信息

  • STORED:保存成功。
  • NOT_STORED:保存失败。

演示案例

  • 添加如下一个键,名为new_key
add new_key 0 900 10
data_value

Memcached:03---存储命令(set、add、replace、append、prepend、cas) 

  • 获取key的内容:
get new_key

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

三、replace

  • replace命令用于替换已存在的key(键)的value(数据值)
  • 如果key不存在,则替换失败,并且您将获得响应NOT_STORED

格式

replace key flags exptime bytes [noreply]
value
  • 参数说明如下:
    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

输出信息

  • STORED:保存成功。
  • NOT_STORED:执行替换失败。

演示案例

  • 添加一个key,名为mykey
add mykey 0 900 10
data_value

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 获取key的内容:
get mykey

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 替换key的内容:
replace mykey 0 900 16
some_other_value

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 再次获取key的内容:
get mykey

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

四、add、set、replace的区别

  • set:set 方法用于设置一个指定key的缓存内容,set方法是add方法和replace方法的集合体
  • add:add 方法用于向 memcache 服务器添加一个要缓存的数据。
  • replace:replace方法用于替换一个指定key的缓存内容,如果key不存在则返回false。
方法 当key存在 当key不存在
add false true
replace 替换(true) false
set 替换(true) true

五、append

  • append命令用于向已存在key(键)value(数据值)后面追加数据

格式

append key flags exptime bytes [noreply]
value
  • 参数说明如下:
    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

输出信息

  • STORED:保存成功后输出。
  • NOT_STORED:该键在 Memcached 上不存在。
  • CLIENT_ERROR:执行错误。

演示案例

  • 设置一个名为runoob的key,value为memcached
set runoob 0 900 9
memcached

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 获取runoob的值
get runoob

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 向runoob后面添加内容"redis"
append runoob 0 900 5
redis

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 重新获取runoob的值
get runoob

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

六、prepend

  • prepend命令用于向已存在key(键)value(数据值)前面追加数据

格式

prepend key flags exptime bytes [noreply]
value
  • 参数说明如下:
    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

输出信息

  • STORED:保存成功后输出。
  • NOT_STORED:该键在 Memcached 上不存在。
  • CLIENT_ERROR:执行错误。

演示案例

  • 设置一个名为runoob的key,value为memcached
set runoob 0 900 9
memcached

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 获取runoob的值
get runoob

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 在runoob前面添加内容"redis"
prepend runoob 0 900 5
redis

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 重新获取runoob的值
get runoob

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

七、cas

  • CAS(Check-And-Set或Compare-And-Swap) 命令用于执行一个"检查并设置"的操作
  • 它仅在当前客户端最后一次取值后,该key对应的值没有被其他客户端修改的情况下,才能够将值写入。
  • 检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值

格式

cas key flags exptime bytes unique_cas_token [noreply]
value
  • 参数说明如下:
    • key:键值 key-value 结构中的 key,用于查找缓存值。
    • flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
    • exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
    • bytes:在缓存中存储的字节数
    • unique_cas_token:通过gets命令获取的一个唯一的64位值。
    • noreply(可选): 该参数告知服务器不需要返回数据
    • value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

输出信息

  • STORED:保存成功后输出。
  • ERROR:保存出错或语法错误。
  • EXISTS:在最后一次取值后另外一个用户也在更新该数据。
  • NOT_FOUND:Memcached 服务上不存在该键值。

演示案例

  • 执行时缺少unique_cas_token参数,报错:
cas tp 0 900 9

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 对一个不存在的键执行,报错:
cas tp 0 900 9 2
memcached

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 设置一个key,如下所示:
set tp 0 900 9
memcached

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 使用gets命令获取带有CAS令牌存的value(数据值)
gets tp

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 使用cas检查并设置值
cas tp 0 900 5 1
redis

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

  • 重新获取key的值:
get tp

Memcached:03---存储命令(set、add、replace、append、prepend、cas)

 

上一篇:Memcached:04---基础命令(get、gets、delete、incr、decr)


下一篇:只能匹配数字(包括小数点)