我目前使用自定义开发的ORM,并计划转向nhibernate。
目前,我使用L1 - 会话级缓存和L2 - 应用程序级缓存。
每当L1缓存从L2缓存请求一个对象时,它会检查数据库是否自上次加载后进行了修改,并且只有在它被修改后才加载。
我可以用NHibernate做到这一点。简而言之,缓存不会对我造成伤害,因为它始终可以获取最新数据并节省对象创建和加载时间。
答案 0 :(得分:14)
恕我直言,如果需要点击数据库,那么拥有二级缓存是没有意义的。这正是整个缓存点,避免尽可能多地击中数据库。
AFAIK没有像你描述的那样实现缓存策略,但是NHibernate L2缓存是完全可插拔的,所以你可以实现它。但是,由于我上面提到的原因,我不会这样做。
如果除了NHibernate之外还有其他应用程序或其他DAL攻击同一个数据库,那么获取过时数据只是一个问题。如果是这种情况,您可以使用SysCache2实现,当基础表中的数据发生更改时,该实现在内部使用SqlCacheDependencies使缓存区域无效。
如果是在服务器场中运行的单个应用,请使用Velocity provider。
如果只有一个NHibernate应用程序实例访问数据库,any cache strategy将会执行,您不必担心会过时的数据。
另见:
答案 1 :(得分:0)
NHibernate中的内置Level1缓存并不是非常复杂,因为它本身就是独立和进程中的。所以你肯定需要有一个二级缓存才能提高NHibernate应用程序的性能。它减少了前往数据库的时间。有许多第三方集成可用于插入NHibernate二级缓存。 NCache 就是一个很好的例子,它不需要更改代码。从这里了解更多,
http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html