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

我正在努力a CacheProvider for Redis.我偶然发现了一些对预制NHibernate Cache Providers非常好奇的东西.

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

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

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

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

我在想的是Destroy()应该用于清理任何资源(比如Dispose()……但它是从Hibernate带来的)并且这些缓存提供程序有一个严重的错误.例如,Hibernate Memcached cache provdier I found不会在destroy()上清除().

FWIW,我是posted this NHibernate Development Group.

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

转载注明原文:c# – NHibernate应该在ISessionFactory.Dispose上清除分布式二级缓存吗? - 代码日志