NHibernate缓存过期

7

我目前使用自定义开发的ORM,计划转移到NHibernate。

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

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

我能否在NHibernate中实现这一点。简而言之,缓存不会对我造成伤害,因为它总是获取最新数据并节省了对象创建和加载时间。

2个回答

14

在我的观点中,如果需要经常访问数据库,那么拥有L2缓存就没有意义了。这正是缓存的全部意义所在,尽可能避免访问数据库。

据我所知,目前还没有实现像你描述的缓存策略,但NHibernate L2缓存是完全可插拔的,所以你可以自己实现它。然而,出于上述原因,我不会这样做。

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

如果是在农场中运行的单个应用程序,请使用Velocity提供程序

如果只有一个NHibernate应用程序实例访问数据库,则任何缓存策略都可以,并且您无需担心获取过时的数据。

另请参阅:


0
NHibernate中内置的Level1缓存本身并不是非常复杂,而且它是独立和进程内的。因此,您绝对需要一个第二级缓存来增强NHibernate应用程序的性能。它可以减少到数据库的访问次数。有许多第三方集成可用于NHibernate二级缓存插件。其中一个很好的例子是NCache,它不需要进行任何代码更改。从这里阅读更多信息。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接