一、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
- 在60秒之内获取key的值:
get runoob
- 在60秒之后获取key的值:
get runoob
二、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
- 获取key的内容:
get new_key
三、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
- 获取key的内容:
get mykey
- 替换key的内容:
replace mykey 0 900 16 some_other_value
- 再次获取key的内容:
get mykey
四、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
- 获取runoob的值
get runoob
- 向runoob后面添加内容"redis"
append runoob 0 900 5 redis
- 重新获取runoob的值
get runoob
六、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
- 获取runoob的值
get runoob
- 在runoob前面添加内容"redis"
prepend runoob 0 900 5 redis
- 重新获取runoob的值
get runoob
七、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
- 对一个不存在的键执行,报错:
cas tp 0 900 9 2 memcached
- 设置一个key,如下所示:
set tp 0 900 9 memcached
- 使用gets命令获取带有CAS令牌存的value(数据值):
gets tp
- 使用cas检查并设置值:
cas tp 0 900 5 1 redis
- 重新获取key的值:
get tp