写命令
<command> key flags exptime bytes [noreply]
value
- flags:客户机使用它存储关于键值对的额外信息
- exptime:缓存过期时间,单位秒,0表示永远存储
- bytes:缓存的字节数,符合value的字节
- noreply:可选,告知服务器不需要返回数据
这种形式命令有set、add、replace、append、prepend
set
键不存在则添加,存在则更新
set hobby 0 0 4
sing
add
键不存在才可添加
add name 0 0 5
peter
replace
键存在才可替换值
replace name 0 0 3
tom
append
键存在才可以在后面追加值
append hobby 0 0 4
swim
prepend
键存在才可以在前面追加数据
prepend name 0 0 5
hello
incr、decr
对十进制的32位无符号整数进行自增或自减
incr/decr key num
num为需要增减的数值
delete
删除键
delete key [noreply]
flush_all
清空缓存数据
flush_all
读命令
get
get key [key ...]
CAS模式
cas key flags exptime bytes unique_cas_token [noreply]
value
场景:如原来KEY的内容为A,客户端C1和客户端C2都把A取了出来,C1往准备往其中加B,C2准备往其中加C,这就会造成C1和C2执行后要么是AB要么是AC,而不会出现我们期望的ABC。这种情况,如果不是在集群环境中,而只是单机服务器,可以通过在写时增加同步锁,就可以解决问题,可是在集群环境中,同步锁是显然解决不了问题的。
memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的item,memcached会 给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到memcached中,您可以通过cas命令把那个唯一标识一起发送给 memcached。如果该item存放在memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个 item,那么该item存放在memcached中的唯一标识将会改变,您的写操作就会失败。
gets name // 下面是返回内容,7就是唯一标识
VALUE name 0 8 7
hellotom
END
cas模式写
cas name 0 0 5 7
world
与redis区别
总结:有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache。