我目前正在使用CouchDB和RESTlet实现REST Web服务。所述的Restlet层是主要用于认证和通过CouchDB的服务的JSON数据的一些过滤:缓存身份验证数据
客户< = HTTP => [的Restlet < = HTTP =>的CouchDB]
我使用的CouchDB还存储用户登录数据,因为我不想为此添加额外的数据库服务器。因此,对我的服务的每个请求都会导致由RESTlet执行的两个CouchDB请求(auth数据+“真实”请求)。为了尽可能保持服务效率,我想减少请求的数量,在这种情况下请求登录数据。
我现在的想法是在缓存登录数据的RESTlet应用程序中提供一个缓存(即通过LinkedHashMap的LRU缓存),因为HTTP缓存可能不够。但是,例如,一旦用户更改密码,我如何使缓存数据无效。由于REST,应用程序可能会并行运行在多个服务器上,我不想创建一个中央实例来缓存登录数据。
当前,我将请求的auth数据保存在缓存中,并尝试使用它们来验证新请求。如果身份验证失败或现在有条目可用,我将向我的CouchDB存储发送一个GET请求,以获取实际的身份验证数据。 因此,在最坏的情况下,已更改其数据的用户可能仍能够使用旧凭证登录。我该如何处理?
或者什么是一个好的策略来保持缓存(s)最新一般?
在此先感谢。
感谢您的回答,我正在看看EHCache。我不确定额外的开销是否由我的使用证明是合理的。也许我会缓存每个实例的所有条目,并给他们一个额外的租约。 – 2010-04-11 09:32:09
正如您接受我的回答,是否意味着您正在切换到EHCache?只是好奇。 – mindas 2010-04-14 11:21:23