我正在为CacheProviderRedis工作。我偶然发现了一些对预先构建的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 上发布了这个。