2009-06-13 161 views
7

我目前使用自定义开发的ORM,并计划迁移到nhibernate。NHibernate缓存过期

目前,我使用L1会话级别缓存和L2-应用级别缓存。

无论何时L1缓存从L2缓存请求对象,它都会检查自上次加载后修改的数据库,并且只有在修改后才加载。

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

回答

14

恕我直言,如果它需要击中数据库,那么拥有二级缓存毫无意义。这正是整个缓存的重点,尽可能避免击中数据库。我们没有像您所描述的那样执行缓存策略,但NHibernate L2缓存完全可插入,因此您可以实施它。但是,我不会,因为我上面提到的原因。

只有当其他应用程序或其他DAL碰到NHibernate以外的同一个数据库时,才能获取过期数据。如果是这种情况,则可以使用SysCache2实现,该实现在内部使用SqlCacheDependencies来在底层表中的数据更改时使缓存区域无效。

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

如果只有一个NHibernate应用程序实例击中数据库,any cache strategy将会这样做,您不必担心获取过时的数据。

参见:

0

NHibernate的构建,在1级高速缓存,因为它独自在站也不是很复杂-proc本质上。所以你肯定需要有一个二级缓存来增强NHibernate应用的性能。它减少了访问数据库的时间。有很多第三方集成可用于插入NHibernate二级缓存。 NCache是一个很好的例子,它不需要更改代码。从这里阅读更多,

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