3

ehcacheを使用して、hibernateを使用してエンティティをキャッシュしています。

ehcacheモニターを見ると、すべてが正常に機能しているように見えます(put cache countを0にフラッシュし、put countを1にリロードします)が、dbで直接値を変更してリロードすると、キャッシュされた値ではなく、更新された値が表示されます。これが期待される動作であるかどうかはわかりませんが、そのように動作するのはキャッシュとしては奇妙です。

私はこれを理解するために見つかったすべての解決策を試しましたが、成功しませんでした。

4

1 に答える 1

0

これは予想される動作です。データベースは、データベース内のデータへのアクセスを高速化するためにキャッシュが存在するすべての正しいデータのソースです。データが異なる場合、キャッシュは定義上間違っています。

したがって、リロードすると、キャッシュはデータベースからリロードされます。

Hibernateを介してデータを保存すると、データはキャッシュとデータベースに書き込まれます。複数のスレッド/プロセスの読み取りまたは書き込みがある場合、ここで問題が発生する可能性があります。これを管理する方法については、Hibernateドキュメントのキャッシュ戦略を参照してください。

一般に、データベースを直接更新すると問題が発生します。キャッシュにあるデータを無効にするか、データベースからリロードする必要があることが通知されない限り、キャッシュには正しいデータがありません。

于 2012-07-18T21:06:24.043 に答える