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 中的
唯一标识将会改变,您的写操作就会失败
Java Program!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步