1

キャッシングは App Engine でどのように機能しますか? @Cached注釈を追加するだけで十分ですか:

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

ただし、Objectify ドキュメントから:

「v3.1 より前の Objectify のグローバル キャッシュ サポートには、競合下での同期の問題がありました。トランザクションの整合性を必要とするエンティティには使用しないでください。すべてのキャッシュ値に有効期限を適用することを強くお勧めします。」

以下の形式のコードがある場合、それを使用してはならないということですか?

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);
        }
});
4

1 に答える 1

1

Objectify は、グローバル キャッシュ サポートを可能な限りトランザクション対応にするために、できる限りの努力をしています。

3.1 のキャッシュは、データストアとほぼトランザクションの一貫性を提供するためにゼロから書き直されました。

たとえば、リクエストまたはタスクが締め切りの制限まで実行された場合、データストアへの書き込みは可能ですが、キャッシュは更新されない可能性があります。

キャッシュはほぼトランザクションです。通常の操作では、競合が激しい場合でも、キャッシュがデータストアと同期しなくなることはありません。これに対する例外は、30 秒 (タスクの場合は 10 分) のハード デッドラインでの DeadlineExceededException です。キャッシュの更新が行われる前に Google がプロセスを強制終了した場合、Google にできることは何もありません。

于 2012-09-04T19:00:21.260 に答える