2012-08-31 49 views
1

反覆操作如何緩存與App Engine的作品?難道濫竽充數添加@Cached註釋:加快通過緩存

@Cached 
public class MyEntity { 
    @Id Long id; 
    ... 
} 

然而,從物化文檔:

「客觀化的全局緩存支持之前V3.1從競爭下的同步問題的困擾不要使用它。需要事務完整性的實體,強烈建議您將過期期限應用於所有緩存值。「

這是否意味着,如果我有這個形式下面的代碼我不應該使用它?

DAOT.repeatInTransaction(new Transactable() { 
     @Override 
     public void run(DAOT daot) 
     { 
       Counter count = daot.ofy().find(Counter.class, COUNTER_ID); 
       count.increment(); 
       daot.ofy().put(count); 
     } 
}); 

回答

1

物化試圖難,因爲它可以使全球的緩存支持as transactional as possible

在3.1緩存已經從無到有,以提供與數據存儲近事務一致性改寫。

如果您的要求或任務運行正對着該期限的限制,例如,有一個a write could make it to the datastore but not update the cache一種可能性:

緩存是近事務。在正常操作下,即使在較大的爭用情況下,緩存也不會與數據存儲不同步。 這是一個例外情況,在30s(10m用於任務)嚴格的截止日期之前是DeadlineExceededException。如果Google在緩存更新發生之前殺死您的進程,我們無能爲力。

+0

所以這個問題是與谷歌的超時時間,也許這可以通過使用AppScale解決了嗎? – xybrek