-1

私はJavaランタイムでappengineのobjectifyを使用しています。また、いくつかのエンティティに対して@Cachedアノテーションを介してmemcacheを使用しています。私の質問は、オブジェクトをデータストアに配置するときのobjectifyの動作についてです。@Cachedアノテーションを持つエンティティを配置する場合、memcacheは更新されますか?または、そのエンティティの既存のキャッシュデータがデータストアと同期しなくなりました。オブジェクトをデータストアに配置するときにmemcacheを更新したいのですが、objectifyがこれをデフォルトで実行するのか、それとも自分で作成する必要があるのか​​わかりません。memcacheが更新された場合、データの有効期限をはるかに長くする(または有効期限を設定しない)ことができます。参考までに、私はトランザクションを使用していません。

4

2 に答える 2

6

@Cachedを使用すると、Objectifyはmemcacheへのすべての更新をほぼトランザクション的に安全な方法で処理します。これは「ほぼトランザクション」です。競合によって崩壊することはありませんが、同期が外れる可能性があるまれな状況があります。たとえば、DeadlineExceededExceptionまたはOutOfMemoryExceptionが発生し、GoogleがVMを終了した場合などです。

ほとんどの種類のキャッシュデータでは、有効期限が長いのが妥当です。

于 2012-04-06T18:43:33.810 に答える
0

Objectifyを使用すると、Memcache内のデータがデータストアと同期しなくなることはありません(一部の古いバージョンや、非常に不運な期限などの例外的な状況を除く)。

Objectifyは、更新するのではなく、Memcacheのバージョンを無効にします(したがって、次の「get」はデータストアに移動してMemcacheに書き込みます)。ただし、このビットについてはわかりません。いずれにせよ、Objectifyはあなたのためにそれを分類します。

于 2012-04-06T18:48:56.373 に答える