memcached是原子的吗

Posted 四猿外

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcached是原子的吗相关的知识,希望对你有一定的参考价值。

所有的被发送到memcached 的单个命令是完全原子的。如果您针对同一份数据同时发送了一个set 命令和一个get 命令,它们不会影响对方。它们将被串行化、先后执行。即使在多线程模式,所有的命令都是原子的,除非程序有bug:)

命令序列不是原子的。如果您通过get 命令获取了一个item,修改了它, 然后想把它set 回memcached,我们不保证这个item 没有被其他进程( process,未必是操作系统中的进程)操作过。在并发的情况下,您也可能覆写了一个被其他进程set 的item。

memcached 1.2.5 以及更高版本,提供了gets 和cas 命令,它们可以解决上面的问题。如果您使用gets 命令查询某个key 的item,memcached 会给您返回该item 当前值的唯一标识。如果您覆写了这个item 并想把它写回到memcached中,您可以通过cas 命令把那个唯一标识一起发送给memcached。如果该item存放在memcached 中的唯一标识与您提供的一致, 您的写操作将会成功。如果另一个进程在这期间也修改了这个item,那么该item 存放在memcached 中的唯一标识将会改变,您的写操作就会失败

以上是关于memcached是原子的吗的主要内容,如果未能解决你的问题,请参考以下文章

系统架构缓存Memcache 使用原子性操作add,实现并发锁

Memcached 工作原理

Memcached 与 Wowza 项目的集成

memcache单个key和value最大是多少

好东西啊!Redis将代替Memcached

5分钟轻松理解分布式锁