【发布时间】:2010-04-14 18:59:08
【问题描述】:
我有 servlet 缓存用户信息,而不是在每次请求时从用户存储中检索它(共享 Ehcache)。我遇到的问题是,如果客户端是多线程的,并且他们在通过身份验证之前发出了多个同时请求,那么我会在我的日志中得到这个:
Retrieving User [Bob]
Retrieving User [Bob]
Retrieving User [Bob]
Returned [Bob] ...caching
Returned [Bob] ...caching
Returned [Bob] ...caching
我想要的是第一个请求将调用用户服务,而其他两个请求被阻止 - 当第一个请求返回,然后缓存对象时,其他两个请求通过:
Retrieving User [Bob]
blocking...
blocking...
Returned [Bob] ...caching
[Bob] found in cache
[Bob] found in cache
我考虑过锁定字符串“Bob”(因为由于实习,它总是同一个对象,对吧?)。那行得通吗?如果是这样,我如何跟踪缓存中实际存在的键并围绕它们构建锁定机制,一旦检索到有效对象,它将返回。谢谢。
【问题讨论】:
标签: java performance caching concurrency