컨텍스트원자 쓰기는
I가 안쪽으로 Ehcache를 java.util.List 기억하고에게으로 Ehcache한다.
Key(String) --> List<UserDetail>
주문 목록에는 가장 활동적인 사용자의 상위 10 위 순위가 포함됩니다.
문제
동시 타사 클라이언트는이 목록에 대한 요청 될 수 있습니다. 나는 순위와 관련하여 가능한 한 최신 정보를 제공해야한다는 요구 사항이 있습니다. 따라서 순위가 사용자의 활동으로 인해 변경된 경우 캐시의 정렬 된 목록을 오래 동안 낡은 상태로 두어서는 안됩니다. 일단 새 List를 다시 계산하면 즉시 캐시에있는 List를 교체하려고합니다.
여러 동시 클라이언트가 순위를 요청하는 바쁜 시나리오를 고려하십시오. 다음과 같은 방식으로 캐시 항목을 어떻게 대체 할 수 있습니까? 클라이언트가 부실 스냅 샷을 계속 가져올 수 있습니다. 그들은 결코 null 값을 가져서는 안됩니다.
캐시에 쓰는 서버 스레드는 하나뿐입니다.
바로 net.sf.ehcache.Cache에 대한 javadoc은 스레드로부터 안전하다고 말합니다. 불행히도 put을 호출하기 전에 캐시 항목을 제거합니다. Cache.put (..) 만 호출하면됩니다. –