【发布时间】:2013-01-15 21:10:06
【问题描述】:
我对 NHibernate L2 缓存的了解越多,似乎在我看来,您主要从以下场景中受益:
- 您主要是通过 Id 进行查询,并且...
- 您主要查询静态数据,和/或
- 您希望经常运行相同的查询(这实际上让我们回到按 Id 查询,因为查询缓存只存储返回的 Id 集)。
我的理解错了吗?如果是这样,它还能在哪些其他情况下产生巨大的性能提升?
【问题讨论】:
标签: nhibernate second-level-cache
我对 NHibernate L2 缓存的了解越多,似乎在我看来,您主要从以下场景中受益:
我的理解错了吗?如果是这样,它还能在哪些其他情况下产生巨大的性能提升?
【问题讨论】:
标签: nhibernate second-level-cache
您的问题似乎与缓存模式有关,而不是与 NHibernate 二级缓存有关。见Cache (computing)。
...缓存是透明存储数据的组件,以便可以更快地处理未来对该数据的请求...
就是这样。如果您的应用程序正在执行任何性能关键操作,二级缓存可以帮助您更快地为它们提供服务。
NHibernate 通过其完整的参数集(分页、排序、过滤器...)缓存查询,因此即使在简单的场景中,也可以为主页或起始页提供所有文章、员工、任务的列表...服务于几乎所有用户...您可以节省时间和资源。
只要底层数据发生变化,缓存就会(可能)被清除,并重新加载新数据。
而且因为有非常智能的缓存提供程序,您甚至可以在网络农场中使用 NHibernate 和缓存。这是您应该阅读的第一篇文章:First and Second Level caching in NHibernate
SO:不仅用于通过 id 或静态数据获取。即使在具有高流量的事务性应用程序上,二级缓存也可以提高性能。因为即使在很短的时间内,您也可以从缓存(例如 memeora)中获取数据并节省一些毫秒...
【讨论】:
...Query<Foo>().Where(x=>x.PropertyA == myVar) 之类的东西进行查询,除非该查询已经运行并且它的时间戳仍然有效,否则根本不会使用缓存?即,如果您希望大多数查询都是唯一的,那么二级缓存不会真正使您受益?