5

我正在CacheProviderRedis工作。我偶然发现了一些对预先构建的NHibernate Cache Providers非常好奇的东西。

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

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

例如,Memcached Provider在被调用Clear()Destroy()调用。在of 中Close()ISessionFactory每个 createdICacheDestroy()调用过,最后调用ICacheProviderStop()。因此,即使 Memcached 是分布式缓存,它也会在ISessionFactory被处理掉时被清除!

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

我在想的是Destroy()应该用来清理任何资源(比如Dispose()......但它是从 Hibernate 带来的)并且这些缓存提供程序有一个严重的错误。例如,我发现的Hibernate Memcached缓存提供程序 不在 clear().destroy()

FWIW,我已经在 NHibernate Development Group 上发布了这个。

4

1 回答 1

5

你说的对。分布式缓存不应该这样,因为它违背了目的。当Destroy()被调用时,提供者中调用的函数应该是Dispose(). 这个函数只是断开缓存而不清除它,因此其他客户端的数据在分布式缓存中保持不变。

于 2012-10-18T10:27:47.493 回答