在何种情况下,Nhibernate二级缓存将提高性能?

在何种情况下,Nhibernate二级缓存将提高性能?,nhibernate,second-level-cache,Nhibernate,Second Level Cache,我对NHibernate L2缓存的了解越多,就越觉得只有在以下情况下您才能从中受益: 您主要是通过Id进行查询,并且 您主要是查询静态数据,和/或 您希望经常运行相同的查询(这实际上让我们回到按Id查询,因为查询缓存只存储返回的Id集) 我的理解错了吗?如果是这样的话,还有什么其他情况可以大大提高性能?您的问题似乎更多地与缓存模式有关,而不是与NHibernate二级缓存有关。看 …缓存是一个透明存储数据的组件,以便将来对该数据的请求可以更快地得到服务 就这样。如果您的应用程序正在执行任何

我对NHibernate L2缓存的了解越多,就越觉得只有在以下情况下您才能从中受益:

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

我的理解错了吗?如果是这样的话,还有什么其他情况可以大大提高性能?

您的问题似乎更多地与缓存模式有关,而不是与NHibernate二级缓存有关。看

…缓存是一个透明存储数据的组件,以便将来对该数据的请求可以更快地得到服务

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

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

当基础数据发生更改时,缓存将(可能)清除,并重新加载新数据

而且,因为有非常智能的缓存提供程序,您甚至可以在web farms中使用NHibernate和缓存。这是您应该进行的第一次阅读:


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

我想我的困惑是:如果我通过
…query()之类的方式进行查询。其中(x=>x.PropertyA==myVar)
,除非该查询已经运行并且其时间戳仍然有效,否则缓存将根本不会被使用?i、 e.如果您希望大多数查询都是唯一的,那么二级缓存不会真正为您带来好处?我想说,根据我的经验,执行“相同”查询时几乎经常会出现这种情况。我不知道您的情况,但根据我的经验,缓存总是有好处的。但如果您认为每个查询都是唯一的,那么缓存就不能带来任何好处。问题是,只有当这是真的。