【问题标题】:Memcached – Are GET and SET operations atomic?Memcached – GET 和 SET 操作是原子的吗?
【发布时间】:2011-08-28 20:34:49
【问题描述】:

这是一个场景:一个查询 memcached 缓存的简单网站。批处理作业每 10-15 分钟更新一次相同的缓存。使用这种模式是否会出现任何问题(例如缓存未命中)?

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

【问题讨论】:

    标签: concurrency memcached high-availability


    【解决方案1】:

    我最初的直觉是,您应该能够从 memcached 缓存中读取/写入而没有副作用(除了由于竞争条件而导致数据陈旧的可能性)。

    关于 memcached 的常见问题解答:

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

    在不了解您的具体情况的情况下,我无法就缓存未命中是否可能提供建议,但我确实概括一下,缓存应该是寻找数据的第一层,而不是唯一的层;我仍然会在缓存后面有一个数据库或其他一些源来处理您所有的缓存未命中。

    【讨论】:

      【解决方案2】:

      这是一个场景:一个查询 memcached 缓存的简单网站。批处理作业每 10-15 分钟更新一次相同的缓存。使用这种模式是否会出现任何问题(例如缓存未命中)?

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

      【讨论】:

        【解决方案3】:

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

        您永远不会收到 一半 的更新,所以从这个角度来看,它是原子的。对给定键的每个请求都将返回该键的所有内容或根本不返回任何内容。

        【讨论】:

          猜你喜欢
          • 2017-09-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-05
          相关资源
          最近更新 更多