NHibernate缓存过期

NHibernate缓存过期,nhibernate,caching,Nhibernate,Caching,我目前使用定制开发的ORM,并计划搬到nhibernate 目前,我使用L1会话级缓存和L2应用程序级缓存 每当一级缓存从二级缓存请求对象时,它都会检查数据库自上次加载以来是否已修改,并且仅在已修改的情况下加载 我可以用NHibernate做这个吗。简而言之,缓存不会伤害我,因为它总是获取最新的数据,并为我节省对象创建和加载时间。IMHO如果二级缓存仍然需要访问数据库,那么二级缓存是毫无意义的。这正是缓存的全部要点,尽可能避免触及数据库 顺便说一句,没有像您描述的那样实现缓存策略,但是NHibe

我目前使用定制开发的ORM,并计划搬到nhibernate

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

每当一级缓存从二级缓存请求对象时,它都会检查数据库自上次加载以来是否已修改,并且仅在已修改的情况下加载


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

IMHO如果二级缓存仍然需要访问数据库,那么二级缓存是毫无意义的。这正是缓存的全部要点,尽可能避免触及数据库

顺便说一句,没有像您描述的那样实现缓存策略,但是NHibernate L2缓存是完全可插入的,因此您可以实现它。然而,我不会,因为我上面提到的原因

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

如果是在服务器场中运行的单个应用程序,请使用

如果只有一个NHibernate应用程序实例进入数据库,那么就可以了,您不必担心会得到过时的数据

另见:


NHibernate中内置的1级缓存并不十分复杂,因为它是独立的,本质上是进程。因此,为了提高NHibernate应用程序的性能,您肯定需要二级缓存。它减少了访问数据库的时间。有许多可用于NHibernate二级缓存的第三方集成插件NCache是不需要更改代码的一个很好的例子。从这里阅读更多内容