Caching 是否与etags和多服务器设置保持一致?
我试图了解在RESTAPI层允许查询和更新客户注册数据库的情况下,哪种缓存策略是最好的。我们目前有3个前端服务器,都与一个中央数据库服务器进行通信 想法是将etag返回给调用客户机,etag与客户记录版本id(在帐户发生任何更改时更新的哈希值)匹配,并且仅当接收到的etag与数据库中存储的版本id匹配时才接受更新调用 假设客户机对负载平衡器路由到服务器1的客户记录执行GET。服务器1没有缓存客户记录,因此将查询数据库,在本地缓存记录,并将记录作为包括etag头的调用响应返回 如果第二个客户端到达并对路由到服务器2的同一客户记录执行相同的GET,服务器2还将本地缓存条目并返回相同的etag头 让我们假设现在第一个客户端已经通过服务器1对同一记录执行了更新调用。服务器1缓存使用最新的记录详细信息进行更新,第一个客户端返回一个新的etag 在此之后,第二个客户端执行条件get调用,提供与接收到的etag设置的“If None Match”头。请求将再次命中服务器2。我的假设是,服务器2仍将缓存旧etag,并将向客户端返回304 Not Modified响应。这是正确的假设吗 在这种情况下,客户机很容易得到过时的数据,并会影响在客户机端看到和使用的数据的总体一致性 需要什么来解决这个问题并确保在任何时候都不会将过时的客户记录数据返回给客户 非常感谢 缓存失效是一个需要解决的问题。至少有三种方法可以解决这个问题。它们因复杂性和过期记录被视为有效的时间长短而异Caching 是否与etags和多服务器设置保持一致?,caching,distributed-caching,distributed-system,Caching,Distributed Caching,Distributed System,我试图了解在RESTAPI层允许查询和更新客户注册数据库的情况下,哪种缓存策略是最好的。我们目前有3个前端服务器,都与一个中央数据库服务器进行通信 想法是将etag返回给调用客户机,etag与客户记录版本id(在帐户发生任何更改时更新的哈希值)匹配,并且仅当接收到的etag与数据库中存储的版本id匹配时才接受更新调用 假设客户机对负载平衡器路由到服务器1的客户记录执行GET。服务器1没有缓存客户记录,因此将查询数据库,在本地缓存记录,并将记录作为包括etag头的调用响应返回 如果第二个客户端到达
+@David列表的另一个解决方案:
最流行的非集群实现是memcachedmemcached+还有一个@David列表解决方案:
根据资产的指纹命名资产(附加)并使顶层不可缓存是本文的基本思想。您可以对我的答案发表评论。:)你可以评论我的回答。:)