1

環境: 春 2.5.6、休止状態 3.3.2、Ehcache 2.0.1、テラコッタ 3.2.1

抽象クラスにキャッシュがあります (5 つの継承者を持つ)

<cache name="com.f4.owl.domain.good.GoodType"
       maxElementsInMemory="15000"
       eternal="false"
       timeToIdleSeconds="0"
       timeToLiveSeconds="0"
       overflowToDisk="false">
    <terracotta/>
</cache>

6550 要素をロードするページもあります。最初はキャッシュが機能しているように見えます (項目がキャッシュから取得され、ページの読み込みが大幅に高速化されます) が、しばらくすると (数分から数時間かかります)、データベースからすべてが再読み込みされます。

Terracotta 開発者コンソールを使用すると、キャッシュが 6550 から約 70 の要素に空になっているように見えます。

私が理解していることから、timeToIdleSeconds と timeToLiveSeconds の両方をゼロに設定すると、キャッシュが永続的になるため、縮小することはありません。誰かがこれに光を当てることができますか?

4

1 に答える 1

1

最後にそれを釘付けにしました。

これは、明示的な同期テーブルを使用せずに (完全に無関係なテーブルで) SQL クエリを実行したために発生したため、完全なキャッシュが空になりました。

説明はこちら: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2224

解決策は、マッピング ファイルで定義されたすべての非読み取り専用 SQL クエリに対して同期テーブルを設定することです。

<sql-query name="queryname">
<synchronize table="tablename"/>
...
</sql-query>
于 2010-08-18T16:45:05.147 に答える