NHibernate 缓存过期

标签 nhibernate caching

我目前使用定制开发的 ORM,并计划转向 nhibernate。

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

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

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

最佳答案

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

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

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

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

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

也可以看看:

  • NHibernate docs about 2nd-level caching
  • NHibernate 2nd Level Cache @ NHibernate Forge
  • First and Second Level caching in NHibernate @ The NHibernate FAQ
  • Ayende's posts about NHibernate caching
  • 关于NHibernate 缓存过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/990946/

    相关文章:

    .net - 在具有相同架构的多个数据库中使用 EF(或另一个 .NET ORM)

    c# - 从不同表中选择的休眠标准

    nhibernate - DetachedCriteria和ICriteria有什么区别

    java - 在 Spring/Hibernate 中正确使用缓存

    css缓存查看文件是最新的还是缓存的

    php - 在 php 中缓存动态 css 文件

    NHibernate QueryOver distinct

    nhibernate - 内连接后防止多个实例

    c++ - Visual Studio C++ 复制 obj 文件而不是编译

    caching - 是什么导致 CPU 中的 L3 缓存未命中?