2012-04-06 4 views
-1

자바 런타임에서 appengine에 대해 objectify를 사용하고 있습니다. 또한 여러 엔티티에 대해 @Cached 주석을 통해 memcache를 사용하고 있습니다. 내 질문은 객체를 데이터 저장소에 배치 할 때 객체화의 동작에 관한 것입니다. @Cached 주석이있는 엔티티를 넣을 때 memcache가 업데이트 되었습니까? 또는 해당 엔티티의 기존 캐시 된 데이터가 데이터 저장소와 동기화되지 않습니다. 개체 저장소를 데이터 저장소에 넣을 때 memcache를 업데이트하고 싶습니다. 그러나 objectify가 기본적으로이 작업을 수행하는지 또는 직접 작성해야하는지 여부는 알 수 없습니다. memcache가 업데이트되면 내 데이터에 대해 더 높은 만료 시간 (또는 만료 없음)을 가질 수 있습니다. 참고 저는 거래를 사용하지 않습니다.Objectify를 사용하여 Appengine memcache 만료

답변

6

@Cached를 사용하면 Objectify가 트랜잭션에 안전한 방식으로 Memcache에 대한 모든 업데이트를 처리합니다. 논쟁의 여지가 있지만, 예를 들어 DeadlineExceededException 또는 OutOfMemoryException을 치고 Google이 사용자의 VM을 종료하는 경우와 같이 동기화되지 않을 수있는 드문 상황이 있기 때문에 "거의 트랜잭션"입니다.

대부분의 유형의 캐시 된 데이터는 긴 만료 시간이 적당합니다.

+1

빠른 응답을 보내 주셔서 감사합니다. 그게 내가 바라는 해답이었고, 당신이 어떻게 객관화 시켰는지 믿습니다. 그래서 당신이 말하는 것에 대해 확실히 알고 있습니다. 작업 해 주셔서 감사합니다. 데이터 저장소를 사용하기가 훨씬 쉽습니다! – Patrick

+0

데이터 저장소에 직접 액세스하는 것에 대한이 질문은 bypasing objectify입니까? 이것은 memcache 업데이트가 데이터 저장소 콜백에서 처리된다는 것을 의미하므로 잘 작동합니다! 내가 진정으로 너희들을 여기에서 이해한다면 나는 확신하지 못한다. - – honzajde

0

Objectify를 사용하면 Memcache의 데이터가 Datastore와 동기화되지 않습니다 (일부 이전 버전 및 예외적 인 상황 (예 : 실제로 불운 한 마감일 제외)).

Objectify는이 비트에 대해 잘 모르지만 Memcache 버전을 무효화하므로 (다음 "get"이 Datastore로 이동하여 Memcache에 쓸 것임) 업데이트하지는 않습니다. 어느 쪽이든, Objectify는 당신을 위해 그것을 정렬합니다.

관련 문제