我正在为CacheProvider
Redis工作。我偶然发现了一些对预先构建的NHibernate Cache Providers非常好奇的东西。
在分布式环境中,我希望每个 Web 服务器共享相同的 NHibernate 缓存。因此,如果其中一个 Web 服务器被删除,缓存也不会受到影响(因为集群中的另一个Web 服务器仍将使用该缓存!)。
但是,根据我的测试和这些提供程序的来源,每次ISessionFactory
关闭(调用Dispose
或Close
)时,都会清除整个缓存区域!
例如,Memcached Provider在被调用Clear()
时Destroy()
调用。在of 中,Close()
ISessionFactory
每个 createdICache
都Destroy()
调用过,最后调用ICacheProvider
过Stop()
。因此,即使 Memcached 是分布式缓存,它也会在ISessionFactory
被处理掉时被清除!
这真的是分布式环境中的预期行为吗?每次关闭 Web 服务器时清除分布式缓存似乎会产生大量缓存未命中,从而失去缓存的全部意义!
我在想的是Destroy()
应该用来清理任何资源(比如Dispose()
......但它是从 Hibernate 带来的)并且这些缓存提供程序有一个严重的错误。例如,我发现的Hibernate Memcached缓存提供程序 不在 clear()
.destroy()
FWIW,我已经在 NHibernate Development Group 上发布了这个。