我目前正在使用 CouchDB 和 RESTlet 实现 REST Web 服务。 RESTlet 层主要用于身份验证以及对 CouchDB 提供的 JSON 数据进行一些小的过滤:
客户端 <= HTTP => [ RESTlet <= HTTP => CouchDB ]
我还使用 CouchDB 来存储用户登录数据,因为我不想为此目的添加额外的数据库服务器。因此,对我的服务的每个请求都会导致 RESTlet 执行两个 CouchDB 请求(身份验证数据+“真实”请求)。为了保持服务尽可能高效,我想减少请求数量,在本例中是对登录数据的冗余请求。
我现在的想法是在我的 RESTlet 应用程序中提供一个缓存(即通过 LinkedHashMap 的 LRU 缓存)来缓存登录数据,因为 HTTP 缓存可能不够。但是,例如,一旦用户更改密码,如何使缓存数据无效。感谢 REST,应用程序可以在多个服务器上并行运行,并且我不想创建一个中央实例只是为了缓存登录数据。
目前,我将请求的身份验证数据保存在缓存中,并尝试使用它们对新请求进行身份验证。如果身份验证失败或现在有可用条目,我将向我的 CouchDB 存储发送 GET 请求,以获取实际的身份验证数据。 因此,在最坏的情况下,已更改数据的用户可能仍然可以使用旧凭据登录。我该如何处理?
或者什么是保持缓存最新的好策略?
提前致谢。
最佳答案
对我来说,您似乎已经成长到足以使用一些“专业”缓存解决方案(例如 EHCache )。所有分布式缓存都允许在不同节点之间进行新的数据复制和失效,因此您的问题已经解决。
关于java - 缓存认证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2608842/