【问题标题】:NHibernate 2nd level cache and web farmsNHibernate 二级缓存和网络农场
【发布时间】:2013-01-25 09:55:09
【问题描述】:

摘自http://nhibernate.hibernatingrhinos.com/28/first-and-second-level-caching-in-nhibernate

“二级缓存的生命周期与会话工厂而非单个会话相关联。一旦实体通过其唯一 ID 加载并且二级缓存处于活动状态,则该实体可用于所有其他会话 (同一个会话工厂)”

如果上述情况属实,并且您有一个网络农场,我认为以下情况属实

1) 每个应用程序都会有一个 SessionFactory(在我的例子中是每个 Web 服务器) 2) 每个网络服务器都有一个不同的二级缓存 3) 加载到服务器 A 二级缓存的数据不能被服务器 B 使用

我说的对吗?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    正如你在文章中提到的First and Second Level caching in NHibernate

    NHibernate 是作为企业 OR/M 产品设计的,因此,它 对在 web farms 场景中运行有很好的支持。这种支持 包括与分布式缓存一起运行,包括 立即农场范围内的更新。 NHibernate 不遗余力地 确保这些场景中的缓存一致性...

    如果使用分布式缓存,所有服务器都会立即更新(例如丢弃陈旧数据)

    另见:

    【讨论】:

    • 好的,所以当它说“二级缓存的生命周期与会话工厂相关”时,这有点误导 IMO。它是否应该说得更像:当一个 SessionFactory 尝试创建一个 2ndLC 时,它首先检查一个是否已经存在,如果有,它会使用它,如果不存在,它将创建一个。所有后续的 SessionFactory 都将使用相同的预先存在的 2ndLC。尚不清楚的是 2ndLC 何时到期?如果所有服务器都关闭并重新启动,它们是否会接收之前存在的 2ndLC?
    • 我想我确实有你的意思。该声明意味着,第二个缓存不是用于会话,而是用于完整的工厂。但是如果使用分布式缓存的方式,更新(清除缓存)可以发送到所有服务器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2011-06-19
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2013-08-24
    相关资源
    最近更新 更多