代码之家  ›  专栏  ›  技术社区  ›  b_erb

缓存身份验证数据

  •  0
  • b_erb  · 技术社区  · 16 年前

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

    客户机<=HTTP=>[RESTlet<=HTTP=>库奇达

    我还使用CouchDB来存储用户登录数据,因为我不想为此添加额外的数据库服务器。因此,对我的服务的每个请求都会导致RESTlet执行两个CouchDB请求(auth data+“real”请求)。为了尽可能地保持服务的效率,我想减少请求的数量,在本例中是对登录数据的冗余请求。

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

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

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   mindas    16 年前

    在我看来,您已经长大到可以使用某种“专业”的缓存解决方案(例如。 EHCache ). 所有分布式缓存都允许新的数据复制;在不同的节点之间失效,这样问题就已经解决了。

        2
  •  1
  •   Prachi    16 年前