memcache

写命令

 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。

你可能感兴趣的:(memcache)