Memcached之原子性(6)

来源:互联网 发布:新手怎么装修淘宝店铺 编辑:程序博客网 时间:2024/04/29 16:07

Memcached所有单个命令都是原子性的。

如果针对同一个Item发送一个set命令和一个get命令,这两个命令之间是不会有影响的。即使是在多线程环境下,所有的命令也都是原子性的,但是我们要注意单个命令是原子性的,但是命令和命令之间的序列不是原子性的。例如使用get命令获取一个Item,然后通过set命令修改该Item,这个时候Memcached是无法保证该Item的值或其他属性不会被其他的进程修改的。同理,在并发环境下,当前线程也可能会修改其他进程set的Item。

那么有没有办法做到原子性呢?

答案是肯定的(不然写这个文章干嘛^-^),Memcached 1.2.5以及更高版本提供了gets和cas命令这两个命令,它们可以解决上面描述的问题。

第一步:通过gets命令查询某个Item的话,Memcached会返回一个该Item的当前值的唯一标示。

第二步:通过cas命令更新的值和唯一标示一起发送到Memcached。如果当前Item的唯一标示和cas提供的唯一标示一样,那么写操作就成功;如果其他线程修改了Item,那么该唯一标示就改变了,那么写操作就失败。


gets和cas命令如何使用,请查看:Memcached之存储命令(2)


0 0
原创粉丝点击