我目前正在使用 CouchDB 和 RESTlet 实现 REST Web 服务。RESTlet 层主要用于对 CouchDB 提供的 JSON 数据进行身份验证和一些小的过滤:
客户端 <= HTTP => [ RESTlet <= HTTP => CouchDB ]
我还使用 CouchDB 来存储用户登录数据,因为我不想为此添加额外的数据库服务器。因此,对我的服务的每个请求都会导致两个由 RESTlet 执行的 CouchDB 请求(身份验证数据 +“真实”请求)。为了使服务尽可能高效,我想减少请求的数量,在这种情况下是对登录数据的冗余请求。
我现在的想法是在我的 RESTlet 应用程序中提供一个缓存(即通过 LinkedHashMap 的 LRU 缓存)来缓存登录数据,因为 HTTP 缓存可能还不够。但是,例如,一旦用户更改密码,我如何使缓存数据无效。多亏了 REST,应用程序可以在多个服务器上并行运行,我不想创建一个中央实例来缓存登录数据。
目前,我将请求的身份验证数据保存在缓存中,并尝试使用它们来验证新请求。如果身份验证失败或现在有可用条目,我将向我的 CouchDB 存储发送一个 GET 请求,以获取实际的身份验证数据。因此,在最坏的情况下,更改了数据的用户可能仍然能够使用他们的旧凭据登录。我该如何处理?
或者一般来说保持缓存最新的好策略是什么?
提前致谢。