【发布时间】:2012-09-22 09:00:23
【问题描述】:
我正在处理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 不 clear() destroy()。
FWIW,我在 NHibernate 开发组posted this。
【问题讨论】:
-
这很有趣。我建议你在NHibernate Development group
-
@DiegoMijelshon - 谢谢你,我已经提交了一个帖子。
标签: c# .net nhibernate