Concurrency Memcached–;GET和SET操作是原子的吗?

Concurrency Memcached–;GET和SET操作是原子的吗?,concurrency,memcached,high-availability,Concurrency,Memcached,High Availability,下面是一个场景:一个查询memcached缓存的简单网站。该缓存每10-15分钟由批处理作业更新一次。使用该模式是否存在任何可能出错的情况(例如缓存未命中) 我担心所有可能发生的比赛情况。例如,如果网站对缓存在memcached中的对象执行GET操作,而该对象被批处理作业覆盖,那么会发生什么情况?我最初的直觉是,您应该能够从memcached缓存中读取/写入数据,而不会产生任何副作用(因为竞争条件可能导致数据过时) 关于memcached的常见问题: memcached是原子的吗?除了你可能遇到

下面是一个场景:一个查询memcached缓存的简单网站。该缓存每10-15分钟由批处理作业更新一次。使用该模式是否存在任何可能出错的情况(例如缓存未命中)


我担心所有可能发生的比赛情况。例如,如果网站对缓存在memcached中的对象执行GET操作,而该对象被批处理作业覆盖,那么会发生什么情况?

我最初的直觉是,您应该能够从memcached缓存中读取/写入数据,而不会产生任何副作用(因为竞争条件可能导致数据过时)

关于memcached的常见问题:

memcached是原子的吗?除了你可能遇到的任何错误,是的 命令在内部是原子的。同时发布多套 没有不良影响,除了最后一个 棍子

如果不了解您的具体情况,我将无法就是否可能发生缓存未命中提出建议,但我确实总结出,缓存应该是查找数据的第一层,而不是唯一一层;我仍然会在缓存后面有一个数据库或其他源来处理所有缓存未命中

下面是一个场景:一个查询memcached缓存的简单网站。该缓存每10-15分钟由批处理作业更新一次。使用该模式是否存在任何可能出错的情况(例如缓存未命中)


请记住,memcached不能保证存储在其中的数据始终保留在缓存中(例如,它是缓存,而不是数据库)。如果您对其他数据使用memcached,则此查询的结果可能会在批处理作业重新插入之前从缓存中删除。

如果您收到数据,它将是您存储的最新正确数据

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