我正在研究a CacheProvider
for Redis。我偶然发现了一些对预先构建的NHibernate Cache Providers非常好奇的东西。
在分布式环境中,我希望每个Web服务器共享相同的NHibernate缓存。因此,如果删除了其中一个Web服务器,则预计缓存不会受到影响(因为群集中的另一个 Web服务器仍将使用该缓存!)。
但是,根据我的测试和这些提供商的来源,每次ISessionFactory
关闭(调用Dispose
或Close
),整个缓存区域都会被清除!
例如,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。
答案 0 :(得分:4)
你是对的。分布式缓存不应该像这样,因为它违背了目的。调用Destroy()
时,提供程序中调用的函数应为Dispose()
。此功能仅断开缓存而不清除缓存,因此其他客户端的数据在分布式缓存中保持不变。