【问题标题】:Should NHibernate clear distributed 2nd Level Cache on ISessionFactory.Dispose?NHibernate 是否应该清除 ISessionFactory.Dispose 上的分布式二级缓存?
【发布时间】:2012-09-22 09:00:23
【问题描述】:

我正在处理a CacheProvider for Redis。我偶然发现了一些对预先构建的 NHibernate Cache Providers 非常好奇的东西。

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

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

例如,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

【问题讨论】:

标签: c# .net nhibernate


【解决方案1】:

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

【讨论】:

  • 正是我一直在想的。任何使用 NHibernate 的现有缓存提供程序的人最有可能获得比他们应该的更多的缓存未命中!
猜你喜欢
  • 2011-08-31
  • 2011-02-09
  • 2020-06-11
  • 2011-09-02
  • 2011-07-21
  • 2017-07-05
  • 1970-01-01
  • 2019-07-06
  • 2011-01-21
相关资源
最近更新 更多