1

我目前正在使用 CouchDB 和 RESTlet 实现 REST Web 服务。RESTlet 层主要用于对 CouchDB 提供的 JSON 数据进行身份验证和一些小的过滤:

客户端 <= HTTP => [ RESTlet <= HTTP => CouchDB ]

我还使用 CouchDB 来存储用户登录数据,因为我不想为此添加额外的数据库服务器。因此,对我的服务的每个请求都会导致两个由 RESTlet 执行的 CouchDB 请求(身份验证数据 +“真实”请求)。为了使服务尽可能高效,我想减少请求的数量,在这种情况下是对登录数据的冗余请求。

我现在的想法是在我的 RESTlet 应用程序中提供一个缓存(即通过 LinkedHashMap 的 LRU 缓存)来缓存登录数据,因为 HTTP 缓存可能还不够。但是,例如,一旦用户更改密码,我如何使缓存数据无效。多亏了 REST,应用程序可以在多个服务器上并行运行,我不想创建一个中央实例来缓存登录数据。

目前,我将请求的身份验证数据保存在缓存中,并尝试使用它们来验证新请求。如果身份验证失败或现在有可用条目,我将向我的 CouchDB 存储发送一个 GET 请求,以获取实际的身份验证数据。因此,在最坏的情况下,更改了数据的用户可能仍然能够使用他们的旧凭据登录。我该如何处理?

或者一般来说保持缓存最新的好策略是什么?

提前致谢。

4

2 回答 2

1

对我来说,您似乎已经长大到可以使用一些“专业”缓存解决方案(例如EHCache)。所有分布式缓存都允许不同节点之间的新数据复制和失效,因此您的问题已经解决。

于 2010-04-10T20:46:00.227 回答
1

您可能正在寻找像 memcached 这样的分布式内存缓存。您可以配置对象年龄、缓存大小,还可以公开回调以从缓存中删除特定对象(例如当信息过时时)。

于 2010-04-10T20:54:07.163 回答