모든 요청 (공유 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"(왜냐하면 인턴으로 인해 항상 같은 대상 이니까?). 그게 효과가 있니? 캐시가 실제로 존재하는 키를 추적하고 그 주위에 잠금 메커니즘을 구축하면 유효한 객체가 검색되면 반환됩니다. 감사.
이것은 내가 생각하고있는 것에 매우 가깝습니다. 인턴 된 문자열을 잠그는 것은 어떤 이유로 든 정말 나쁜 생각처럼 보였습니다. 그러나이 시나리오에서 Map의 모든 호출을 잠그고 있습니다. 그러나 이것은 모든 스레드가 공유하는 다른 캐시 (성능 현명한)와 다른 캐시가 아닌 것 같습니다. 나는이 오버 헤드가 여전히 빠른 속도로 내 불필요한 호출을 내 사용자 인증 공급자에게 보내는 것이라고 생각합니다. – Gandalf