【问题标题】:NHibernate cache expirationNHibernate 缓存过期
【发布时间】:2009-06-13 16:12:20
【问题描述】:

我目前使用自定义开发的 ORM,并计划迁移到 nhibernate。

目前,我同时使用 L1 - 会话级缓存和 L2 - 应用程序级缓存。

每当 L1 缓存从 L2 缓存请求对象时,它都会检查数据库自上次加载以来是否已修改,并且仅在已修改时才加载。

我可以用 NHibernate 做到这一点吗?简而言之,缓存不会伤害到我,因为它总是能获取最新数据并节省我的对象创建和加载时间。

【问题讨论】:

    标签: nhibernate caching


    【解决方案1】:

    恕我直言,如果无论如何都需要访问数据库,那么拥有 L2 缓存是没有意义的。这正是缓存的全部意义所在,尽可能避免触及数据库。

    AFAIK 没有像您描述的那样实现缓存策略,但是 NHibernate L2 缓存是完全可插入的,因此您可以实现它。但是,由于我上面提到的原因,我不会。

    只有当除了 NHibernate 之外还有其他应用程序或其他 DAL 访问同一数据库时,获取过时的数据才是问题。如果是这种情况,您可以使用SysCache2 实现,它在内部使用SqlCacheDependencies 在基础表中的数据更改时使缓存区域无效。

    如果是在场中运行的单个应用,请使用 Velocity provider

    如果只有一个 NHibernate 应用程序实例访问数据库,any cache strategy 就可以了,您不必担心得到过时的数据。

    另见:

    【讨论】:

      【解决方案2】:

      NHibernate 中的内置 Level1 缓存并不是很复杂,因为它本质上是独立的并且是进程内的。所以你肯定需要二级缓存来提高 NHibernate 应用程序的性能。它减少了访问数据库的时间。有许多第三方集成可用于 NHibernate 二级缓存。 NCache 就是一个很好的例子,不需要更改代码。从这里阅读更多,

      http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html

      【讨论】:

        猜你喜欢
        • 2012-10-20
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 2011-09-02
        相关资源
        最近更新 更多