如何在Memcached中处理并发更新



我的理解是Memcached是无锁的(在其默认配置中),因此没有客户机可以阻碍任何其他客户机的操作。如果是这种情况,那么Memcached如何处理两个或多个试图同时更新同一对象的客户机?

Memcached如何处理一个对象的多个版本?简单地取更新最后完成的版本,然后从缓存中删除其他版本?数据库是否主动使缓存在Memcached服务器上的对象无效?

Memcached只保存最新版本的对象。如果您进行了get、修改和put操作,则无法保证put操作适用于与get操作相同的值。如果需要同步,可以使用CAS操作(gets, cas)

添加一些工作原理的细节。CAS -比较和交换或检查和设置。

Memcached 1.2.5及更高版本提供了get和cas命令,可以解决上述问题。如果使用gets命令查询键的缓存,它将返回项当前值的唯一标识符。如果覆盖该项,需要将其写回Memcached,可以通过cas命令将唯一的ID发送给Memcached。如果存储在Memcached中的项的唯一标识符与您提供的标识符一致,则写操作将成功。如果其他进程在此期间也修改了该项,则存储在Memcached中的项的唯一标识符将发生变化,您的写操作将失败。

Memcached保存的键/值具有唯一标识符casUnique。执行incr/decr操作时,先获取casUnique,执行incr,查看返回值是否为casUnique+1。如果是,更新它,否则,它失败,不更新!

https://developpaper.com/question/why-does-incr-of-memcache-not-have-concurrency-problems/

相关内容

  • 没有找到相关文章

最新更新