2011-08-28 88 views
5

这是一个场景:一个简单的网站,它查询一个memcached缓存。每10-15分钟一个批处理作业更新相同的缓存。有了这种模式,有什么可能会出错的(例如缓存未命中)?Memcached - GET和SET操作是否为原子操作?

我所有可能发生的可能的赛车状况有关。例如,如果网站对缓存在memcached中的对象执行GET操作,而同一对象被批量作业覆盖,会发生什么情况?

回答

6

我最初的反应是,你应该能够从无副作用(不是由于竞争条件陈旧数据的可能性除外)memcached的缓存读/写。

在memcached中的常见问题解答:

是memcached原子?除了您可能遇到的任何错误,是的所有 命令都是内部原子的。同时 发行多套具有作为一个 枝无不良影响,除了最后一个。

不知道更多关于你的具体情况,我不能够就是否或不高速缓存未命中是可能的,但我做一个概括的缓存应该是在寻找数据,而不是第一层唯一的一层;我仍然有一个数据库或其他来源的缓存来处理所有的缓存未命中。

2

这里是场景:一个简单的网站,它查询一个memcached缓存。每10-15分钟一个批处理作业更新相同的缓存。有了这种模式,有什么可能会出错的(例如缓存未命中)?

请记住,memcached的并不保证存储在其中的数据会一直留在缓存中(e.g,这是一个高速缓存,而不是一个数据库)。如果您使用memcached处理其他数据,则在批处理作业重新插入之前,此查询的结果可能会从缓存中逐出。

2

如果收到的数据,这将是你存储最新的正确的数据。

你永远不会收到一半的更新,所以从这个角度来看,它是原子的。对于给定密钥的每个请求将返回该密钥的全部或全部内容。