14

nonstrict-read-writeとの本当の違いは何read-writeですか?ehcacheとHibernateのドキュメントを読むことはできますが、私が見る限り、「更新を行う場合は読み取りと書き込みの方が優れている」としか言われていません。物足りない。

次のように構成された、有効期間の長いキャッシュコレクションに問題がある可能性があります。

<cache name="trx.domain.Parent.children" maxElementsInMemory="5000"
    eternal="false" overflowToDisk="false" timeToIdleSeconds="1200"
    timeToLiveSeconds="1800">
    <cacheEventListenerFactory
        class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
        properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" />

<set name="children" lazy="false" inverse="true">
    <cache usage="nonstrict-read-write"/>
    <key column="callout_id" />
    <one-to-many class="Child" />
</set>

コレクションが更新されると、更新が発生するノードなどで正確に何が起こりますか?nonstrict-read-writeこことの違いは何read-writeですか?ノードがキャッシュからの古い10分のバージョンを使用する可能性はありますか?

長いタイムアウトと非同期レプリケーションに注意してください。

4

2 に答える 2

18

読み取り/書き込み:2つのトランザクションがデータを変更しようとすると、これらのトランザクションは「読み取りコミット」レベルで分離されます(または、データベースがそれに設定されている場合は繰り返し可能な読み取り)-通常はそれで十分です。通常、「シリアル化可能」は必要ありません。分離レベル。

非厳密な読み取り/書き込み:キャッシュはまったくロックされていないため、2つのトランザクションがデータを変更した場合、取得するデータがわからない場合、キャッシュの状態=データベースの状態であるという保証はありません。

これは、2つのトランザクションによってデータが同時に変更される可能性が非常に低い場合にのみ安全です。適切なキャッシュタイムアウトも設定する必要があります。

詳細と非常に優れた説明については、ここを参照してください:休止状態のキャッシュ戦略

于 2011-05-16T20:46:32.550 に答える
3

NONSTRICT_READ_WRITE:影響を受けるデータを変更したトランザクションがコミットされた後、キャッシュが更新されます。したがって、強い整合性は保証されず、古いデータがキャッシュから取得される可能性がある短い時間枠があります。この種の戦略は、結果整合性を許容できるユース ケースに適しています。

READ_WRITE:この戦略は、「ソフト」ロックを使用することで実現する強力な一貫性を保証します。キャッシュされたエンティティが更新されると、そのエンティティのキ​​ャッシュにもソフト ロックが格納され、トランザクションがコミットされた後に解放されます。ソフトロックされたエントリにアクセスするすべての同時トランザクションは、対応するデータをデータベースから直接フェッチします。

于 2017-11-21T11:29:33.957 に答える