분산 웹 서비스 (dropwizard/jdbi)가 있습니다. 롤 메모리와 대응하는 학생들의지도를 말하면서 메모리 캐시를 유지할 것입니다.dropwizard/jdbi 웹 서비스에서 메모리 캐시를 올바르게 업데이트합니다.
이러한 개체는 여러 DAO의 데이터로 작성됩니다. 따라서 학생 업데이트가 발생하면 해당 MySQL 테이블을 업데이트하기 위해 트랜잭션 using @Transactional with @CreateSqlUpdate in jdbi을 수행해야합니다. 또한 업데이트시 캐시 또는 맵을 무효화해야합니다.
제 질문은이 캐시 업데이트/무효화가 거래의 일부가되어야한다는 것입니다. 데이터베이스 업데이트가 발생하면 캐시 무효화 만 발생하고 데이터베이스 업데이트가 발생하지만 캐시 업데이트가 실패하면 데이터베이스가 롤백됩니다. 여기서 염두에 두어야 할 동시성/일관성 문제는 무엇입니까?
이 제안에 감사드립니다. 그러나 현재 캐시에 버전을 채택 할 자유가 있는지 확신 할 수 없습니다. 또 하나의 점은 동시성 (concurrency) 지점에서입니다. 트랜잭션 완료 후에 만 캐시 무효화가 발생한다는 것을 확실하게해야합니까? – Deven
위의 솔루션에서 tx committed 후 캐시를 업데이트 할 수 있습니다. 오류가 없으면 tx 시간이 최소화됩니다. 클라이언트 데이터와 데이터베이스 데이터 간의 버전 불일치로 인해 다음 쓰기 tx에서 캐시 업데이트 실패를 감지합니다. –