1

在 Memcached 上保存 MySQL 查询的结果时,我正在考虑一致性。更新会发生什么?

更新时,数据将从 Memcached 中删除。

但是......考虑以下场景,其中以下操作按此顺序发生:

  1. 客户端 A 向 API 服务器发送更新请求。
  2. 客户端 B 向 API 服务器发送 GET 请求。
  3. 两个请求都并行执行。
  4. 处理客户端 B 请求的脚本从数据库中获取数据。
  5. 处理客户端 A 请求更新 DB 数据的脚本。
  6. 处理客户端 A 请求的脚本向 memcached 发送删除请求。
  7. 处理客户端 B 请求的脚本向 memcached 发送插入请求。

在这种情况下,memcached 会填充旧数据。

在这种情况下如何确保一致性?

4

1 回答 1

0

在包含数据库访问的任何代码中集中您的缓存处理。脚本 A 和 B,除了通过这一层外,从不与数据库对话。

如果您不想遇到所有这些麻烦(取决于您使用的堆栈,有现有的解决方案),然后将您的缓存限制在缓存不一致不会造成任何伤害的情况下。

于 2015-11-20T23:02:16.613 回答