NHibernate应该在ISessionFactory.Dispose上清除分布式二级缓存吗?

时间:2012-09-22 09:00:24

标签: c# .net nhibernate

我正在研究a CacheProvider for Redis。我偶然发现了一些对预先构建的NHibernate Cache Providers非常好奇的东西。

在分布式环境中,我希望每个Web服务器共享相同的NHibernate缓存。因此,如果删除了其中一个Web服务器,则预计缓存不会受到影响(因为群集中的另一个 Web服务器仍将使用该缓存!)。

但是,根据我的测试和这些提供商的来源,每次ISessionFactory关闭(调用DisposeClose),整个缓存区域都会被清除

例如,the Memcached Provider在调用Clear()时调用Destroy()。在the Close() of ISessionFactory中,每个已创建的ICache已调用Destroy(),最后ICacheProvider已调用Stop()。因此,即使Memcached是一个分布式缓存,它也会在ISessionFactory被处理后被清除!

这个真的是分布式环境中的预期行为吗?每次关闭Web服务器时清除分布式缓存似乎会产生 lot 缓存未命中,从而失去整个缓存点!

我在想的是Destroy()应该用来清理所有资源(比如Dispose() ......但它是从Hibernate带来的)和这些缓存提供程序有严重错误。例如,clear()上的Hibernate Memcached cache provdier I found destroy()

FWIW,我在NHibernate Development Group上posted this

1 个答案:

答案 0 :(得分:4)

你是对的。分布式缓存不应该像这样,因为它违背了目的。调用Destroy()时,提供程序中调用的函数应为Dispose()。此功能仅断开缓存而不清除缓存,因此其他客户端的数据在分布式缓存中保持不变。