5

私は for Redis に取り組んでCacheProviderます。ビルド済みのNHibernate Cache Providersについて非常に興味深いものを見つけました。

分散環境では、各 Web サーバーが同じ NHibernate キャッシュを共有することを期待しています。したがって、Web サーバーの 1 つが削除されても、キャッシュは影響を受けないことが予想されます (クラスター内の別のWeb サーバーがまだそのキャッシュを使用しているためです!)。

ISessionFactoryただし、私のテストとこれらのプロバイダーのソースによると、が閉じられる (Disposeまたはを呼び出すClose)たびに、キャッシュ領域全体がクリアされます!

たとえば、Memcached プロバイダーClear()は、 が呼び出されたときに呼び出しDestroy()ます。ofでは、作成されたそれぞれClose()ISessionFactoryICache呼び出さDestroy()れ、最後にICacheProviderStop()呼び出されます。したがって、Memcached は分散キャッシュであることを意図していますが、破棄されるとクリアISessionFactoryされます!

これは本当に分散環境で予期される動作ですか? Web サーバーがダウンするたびに分散キャッシュをクリアすると、多くのキャッシュ ミスが発生し、キャッシュのポイントがすべて失われます。

私が考えているのは、リソースDestroy()をクリーンアップするために使用する必要があり(... のように、Hibernate から持ち込まれたもの)、これらのキャッシュ プロバイダーには深刻なバグがあるということです。たとえば、私が見つけたHibernate Memcached キャッシュ provdierはon ではありませんDispose() clear()destroy()

FWIW、これをNHibernate Development Groupに投稿しました。

4

1 に答える 1

5

あなたが正しいです。分散キャッシュは、目的に反するため、このように動作するべきではありません。がDestroy()呼び出されると、プロバイダーで呼び出される関数は になりますDispose()。この関数はキャッシュを切断するだけでクリアしないため、他のクライアントのデータは分散キャッシュにそのまま残ります。

于 2012-10-18T10:27:47.493 に答える