我目前使用定制开发的 ORM,并计划转向 nhibernate。
目前,我同时使用 L1 - session 级缓存和 L2 - 应用程序级缓存。
每当 L1 缓存从 L2 缓存请求对象时,它会检查数据库自上次加载以来是否有修改,并且仅在已修改时加载。
我可以用 NHibernate 做到这一点吗?简而言之,缓存不会伤害我,因为它总是获取最新数据并为我节省对象创建和加载时间。
最佳答案
恕我直言,如果无论如何都需要访问数据库,那么拥有 L2 缓存是没有意义的。这正是缓存的全部意义所在,尽可能避免访问数据库。
AFAIK 没有像您描述的那样实现缓存策略,但是 NHibernate L2 缓存是完全可插入的,因此您可以实现它。但是,由于我上面提到的原因,我不会。
如果除了 NHibernate 之外还有其他应用程序或其他 DAL 访问相同的数据库,获取过时的数据只是一个问题。如果是这种情况,您可以使用 SysCache2实现,内部使用 SqlCacheDependencies当基础表中的数据发生变化时,使缓存区域无效。
如果它是在场中运行的单个应用程序,请使用 Velocity provider .
如果只有一个 NHibernate 应用程序实例访问数据库,any cache strategy会做,你不必担心得到过时的数据。
也可以看看:
关于NHibernate 缓存过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/990946/