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 服务上不存在该键值。