java - 缓存认证数据

标签 java caching couchdb restlet

我目前正在使用 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/

相关文章:

java - 将 RecyclerView 中的项目更改为 onBindViewHolder

java - 使用Oracle日期字段中的cachedrowset时如何获取完整的日期和时间数据

java - 如何在 LoadingCache 中有效存储可能具有多个键的对象

couchdb - 如何重命名 CouchDB 数据库?

curl - 如何使用 cURL 将设计文档上传到 CouchDB?

jquery - 使用 CouchJS 需要哪些 jQuery?

java - 正则表达式从以下代码中选择名称

java - Web服务应用程序如何知道soap调用特定方法,而无需在soap消息中使用操作名称?

java - 在集群上运行 Apache Spark 应用程序时是否可以缓存应用程序 jar?

ios - 是否可以清除 Google Maps for iOS SDK 上的 map 图 block 缓存?