The*_*Sky 5 .net c# nhibernate
我工作的一CacheProvider对Redis的。我偶然发现了一些对预先构建的NHibernate Cache Providers非常好奇的东西。
在分布式环境中,我希望每个 Web 服务器共享相同的 NHibernate 缓存。因此,如果其中一个 Web 服务器被移除,缓存也不会受到影响(因为集群中的另一个Web 服务器仍将使用该缓存!)。
但是,根据我的测试和这些提供程序的来源,每次ISessionFactory关闭(调用Dispose或Close)时,都会清除整个缓存区域!
例如,Memcached Provider调用Clear()whenDestroy()被调用。在对Close()的ISessionFactory,每个创建ICache已Destroy()调用,然后最后ICacheProvider也Stop()呼吁。因此,尽管 Memcached 旨在成为分布式缓存,但在ISessionFactory处理它时它会被清除!
这真的是分布式环境中的预期行为吗?每次关闭 Web 服务器时清除分布式缓存似乎会产生大量缓存未命中,从而失去缓存的全部意义!
我在想的是,Destroy()应该使用它来清理任何资源(例如Dispose()……但它是从 Hibernate 中带来的)并且这些缓存提供程序有一个严重的错误。例如,Hibernate的Memcached的缓存provdier我发现 不 clear()上destroy()。
FWIW,我已将其发布在 NHibernate 开发组上。
小智 5
你是对的。分布式缓存不应该像这样,因为它违背了目的。当Destroy()被调用时,被称为在供应商的功能应该是Dispose()。此功能仅断开缓存而不清除缓存,因此其他客户端的数据在分布式缓存中保持完整。
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |