私は for Redis に取り組んでいCacheProviderます。ビルド済みのNHibernate Cache Providersについて非常に興味深いものを見つけました。
分散環境では、各 Web サーバーが同じ NHibernate キャッシュを共有することを期待しています。したがって、Web サーバーの 1 つが削除されても、キャッシュは影響を受けないことが予想されます (クラスター内の別のWeb サーバーがまだそのキャッシュを使用しているためです!)。
ISessionFactoryただし、私のテストとこれらのプロバイダーのソースによると、が閉じられる (Disposeまたはを呼び出すClose)たびに、キャッシュ領域全体がクリアされます!
たとえば、Memcached プロバイダーClear()は、 が呼び出されたときに呼び出しDestroy()ます。ofでは、作成されたそれぞれがClose()ISessionFactoryICache呼び出さDestroy()れ、最後にICacheProviderがStop()呼び出されます。したがって、Memcached は分散キャッシュであることを意図していますが、破棄されるとクリアISessionFactoryされます!
これは本当に分散環境で予期される動作ですか? Web サーバーがダウンするたびに分散キャッシュをクリアすると、多くのキャッシュ ミスが発生し、キャッシュのポイントがすべて失われます。
私が考えているのは、リソースDestroy()をクリーンアップするために使用する必要があり(... のように、Hibernate から持ち込まれたもの)、これらのキャッシュ プロバイダーには深刻なバグがあるということです。たとえば、私が見つけたHibernate Memcached キャッシュ provdierはon ではありません。Dispose() clear()destroy()
FWIW、これをNHibernate Development Groupに投稿しました。