2009-06-02 10 views
14

ehcacheはデフォルトでマルチスレッドをサポートしていますか、それとも設定を変更する必要がありますか? Ehcacheで私のアプリケーションをマルチスレッドすると、DBのヒット数が実際に増えていることがわかります。つまり、キャッシュがすべてシングルトンであるにもかかわらず、すべてのスレッドで使用できるグローバルキャッシュがありません。助言がありますか?Ehcache&MultiThreading

答えて

11

これはthe FAQから、あなたの質問に答えることがあります。

は、それがキャッシュから取得後の要素の値を変更するスレッドセーフですか?

は、キャッシュ要素の値が複数のスレッドからグローバルにアクセス可能であることを覚えておいてください。 本質的に値を変更するのはスレッドセーフではありません。値を取得し、キャッシュ要素を削除してから値を再挿入する方が安全です。 official documentationから

(私が追加強調)

+1

別の方法として、ehcache明示的ロックAPI(http://ehcache.org/documentation/explicitlocking.html)を参照することができます.ehcacheとマルチスレッドに関する議論は、この側面も考慮しないと不完全である可能性があります。 –

1

は、それがを具体的に構築され、あなたが複数のスレッドからElementを変更しない限り、非常に同時アクセスの下でも実行するようにテストされて表示されます。

しかし、もちろん、これはEhcacheのを使用すると、コードのスレッドセーフの他の部分を作るという意味ではありません。同じキーを使用して複数のスレッドから同じ値をフェッチした場合、そのインスタンスは共有され、変更する前に何をしているのかを知る必要があります。ベストは文字列のような不変のオブジェクトをキャッシュされた値として使うようです。