我目前使用自定义开发的ORM,计划转移到NHibernate。
目前,我同时使用L1 - 会话级缓存和L2 - 应用程序级缓存。
每当L1缓存通过L2缓存请求对象时,它会检查自上次加载以来是否有修改,并且仅在已修改时才加载。
我能否在NHibernate中实现这一点。简而言之,缓存不会对我造成伤害,因为它总是获取最新数据并节省了对象创建和加载时间。
我目前使用自定义开发的ORM,计划转移到NHibernate。
目前,我同时使用L1 - 会话级缓存和L2 - 应用程序级缓存。
每当L1缓存通过L2缓存请求对象时,它会检查自上次加载以来是否有修改,并且仅在已修改时才加载。
我能否在NHibernate中实现这一点。简而言之,缓存不会对我造成伤害,因为它总是获取最新数据并节省了对象创建和加载时间。
在我的观点中,如果需要经常访问数据库,那么拥有L2缓存就没有意义了。这正是缓存的全部意义所在,尽可能避免访问数据库。
据我所知,目前还没有实现像你描述的缓存策略,但NHibernate L2缓存是完全可插拔的,所以你可以自己实现它。然而,出于上述原因,我不会这样做。
只有当除了NHibernate之外还有其他应用程序或其他DAL访问同一个数据库时,才会存在获取过时数据的问题。如果是这种情况,您可以使用SysCache2实现,它在内部使用SqlCacheDependencies来在底层表中的数据更改时使缓存区域无效。
如果是在农场中运行的单个应用程序,请使用Velocity提供程序。
如果只有一个NHibernate应用程序实例访问数据库,则任何缓存策略都可以,并且您无需担心获取过时的数据。
另请参阅:
http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html