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