【问题标题】:In what kind of situations will Nhibernate Second Level Cache improve performance?Nhibernate 二级缓存在哪些情况下会提升性能?
【发布时间】:2013-01-15 21:10:06
【问题描述】:

我对 NHibernate L2 缓存的了解越多,似乎在我看来,您主要从以下场景中受益:

  • 您主要是通过 Id 进行查询,并且...
  • 您主要查询静态数据,和/或
  • 您希望经常运行相同的查询(这实际上让我们回到按 Id 查询,因为查询缓存只存储返回的 Id 集)。

我的理解错了吗?如果是这样,它还能在哪些其他情况下产生巨大的性能提升?

【问题讨论】:

    标签: nhibernate second-level-cache


    【解决方案1】:

    您的问题似乎与缓存模式有关,而不是与 NHibernate 二级缓存有关。见Cache (computing)

    ...缓存是透明存储数据的组件,以便可以更快地处理未来对该数据的请求...

    就是这样。如果您的应用程序正在执行任何性能关键操作,二级缓存可以帮助您更快地为它们提供服务。

    NHibernate 通过其完整的参数集(分页、排序、过滤器...)缓存查询,因此即使在简单的场景中,也可以为主页或起始页提供所有文章、员工、任务的列表...服务于几乎所有用户...您可以节省时间和资源。

    只要底层数据发生变化,缓存就会(可能)被清除,并重新加载新数据。

    而且因为有非常智能的缓存提供程序,您甚至可以在网络农场中使用 NHibernate 和缓存。这是您应该阅读的第一篇文章:First and Second Level caching in NHibernate

    SO:不仅用于通过 id 或静态数据获取。即使在具有高流量的事务性应用程序上,二级缓存也可以提高性能。因为即使在很短的时间内,您也可以从缓存(例如 memeora)中获取数据并节省一些毫秒...

    【讨论】:

    • 我想我的困惑是这样的:如果我通过...Query<Foo>().Where(x=>x.PropertyA == myVar) 之类的东西进行查询,除非该查询已经运行并且它的时间戳仍然有效,否则根本不会使用缓存?即,如果您希望大多数查询都是唯一的,那么二级缓存不会真正使您受益?
    • 我想说,根据我的经验,几乎经常会出现执行“相同”查询的情况。我不知道你的情况,但根据我的经验,缓存总是有好处的。但是如果你说每个查询永远都是唯一的,那么缓存就不能带来任何好处。问题是只有当这是真的。
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 2011-01-22
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多