최대 절전 모드 2 레벨 캐시 캐싱 커밋 된 엔티티가 아닙니다
-
05-07-2019 - |
문제
다른 애플리케이션이 DB를 수정하지 않는다는 것을 알면 응용 프로그램이 DB에 통합 된 엔티티를 캐시 할 수 있도록 최대 절전 모드 2 레벨 캐시 (EHCACHE를 사용하고 있음)가 가능한지 궁금합니다.
내 생각은 레코드 A를 업데이트하면 레코드 A의 값을 알고 테라코타와 같은 JVM 클러스터 시스템이 JAVA 동기화 잠금을 사용한 JVM 힙 메모리 측면에서 이러한 유형의 동작을 지원하는 캐시를 할 수 있어야한다는 것입니다.
해결책
최첨단 Pojo 's in Action Book에 대해 이야기합니다.
단일 서버 응용 프로그램이 Persistence Framework를 사용하여 데이터베이스를 업데이트하면 프레임 워크가 프로세스 수준 캐시를 업데이트합니다.
그리고...
업데이트 가능한 캐시 된 객체는 일반적으로 낙관적 잠금을 사용해야합니다. 응용 프로그램이 데이터베이스의 맹목적으로 덮어 쓰는 것을 방해하지 않기 때문입니다. 트랜잭션이 데이터베이스에서 이미 변경된 캐시 된 개체를 업데이트하면 낙관적 잠금 실패로 인해 트랜잭션이 롤백됩니다. 지속성 프레임 워크는 캐시에서 오래된 데이터를 제거하고 응용 프로그램은 최신 버전의 데이터로 트랜잭션을 재 시도 할 수 있습니다.
JPA에 따라 최대 절전 모드 책에 따라 다음 전략 중 하나를 선택하십시오.
- 트랜잭션 : 관리되는 환경에서만 사용할 수 있으므로 필요한 경우 전체 트랜잭션 격리를 반복 가능한 읽기까지 보장합니다. 업데이트의 드문 경우에 동시 트랜잭션에서 오래된 데이터를 방지하기 위해 중요한 데이터 에이 전략을 사용 하여이 전략을 사용하십시오.
- Read-Write :이 전략은 타임 스탬핑 메커니즘을 사용하여 읽기 커밋 된 격리를 유지하며 클러스터되지 않은 환경에서만 사용할 수 있습니다. 다시 말하지만,이 전략은 거의 업데이트의 드문 경우 동시 거래에서 오래된 데이터를 방지하기 위해 중요한 데이터를 사용하는 데 사용됩니다.
원래 Anwser에 추가 : Hibernate는 @cache를 사용하든 (usage = cacheconcurrencystrategy.nactomprict_read_write) 캐시와 데이터베이스 간의 일관성을 보장하지 않습니다. 사용하려면 Perfomance에 영향을 줄 수있는 충분히 짧은 만료 시간 초과를 구성해야합니다.
문안 인사,