问题标签 [first-level-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
431 浏览

nhibernate - 在 NHibernate 一级缓存中管理实体

在线程/会话生命周期内管理一级缓存中持久实体的正确方法是什么?实际上,每个线程(会话)只有一个或两个持久化实例应该始终存在,以便在保存之前从其他(瞬态)实体引用它们。

由于我需要每隔一段时间清除一次会话缓存(因为否则它会被填满并且非常缓慢),我不确定的是 - 我应该:

  1. 从会话中驱逐所有实体,除了我需要的那些?
  2. 清除整个会话,并重新加载必要的实体?
  3. 创建一个新会话并重新加载必要的实体?
0 投票
4 回答
900 浏览

nhibernate - NHibernate 多次加载同一个对象 - 请帮助!

我刚刚阅读了我的一个 ASP.NET 页面的跟踪,我注意到每次需要用户时都会从数据库中加载页面用户。由于每个ISession都应该缓存对象,因此我对此感到非常困惑。

从逻辑上讲,问题肯定是以下两件事之一:

  1. ISession缓存无法正常工作
  2. 每次请求用户时,都会使用不同的方式加载ISession

我认为问题是2)。我正在使用 Castle Windsor 来管理对象生命周期,因此我发布了一些我正在使用的代码,以防有人可以帮助发现问题。温莎城堡管理的课程有:

  1. MooseUserRepository- 用于管理 MooseUser 实例的存储库类(即本例中的页面用户)
  2. KctcUnitOfWork- ISession 的包装器

MooseUserRepository有这样的构造函数依赖KctcUnitOfWork

配置文件如下所示:

注意PerWebRequest生活方式。

Castle Windsor 容器只是一种称为实用程序类的静态属性,Moose.Application因此它始终存在:

页面本身有一个 IMooseUserRepository 实例,如下所示:

页面的用户由如下所示的属性访问:

这些后续调用似乎PageUser导致了重复的 SQL 命令:

现在显然我可以通过将加载的对象存储在私有变量中来解决这个问题MooseUser,但我的理解是ISession应该为我做这个。

任何人都可以冒险猜测出了什么问题吗?

0 投票
2 回答
243 浏览

nhibernate - 我的基于 Castle ActiveRecord 的应用程序中是否启用了一级缓存?

我有一个基于 Castle ActiveRecord 的简单级别的 ASP.NET Web 应用程序。如何确定是否在其中启用了一级缓存?

0 投票
2 回答
719 浏览

nhibernate - 一级缓存可以与 ICriteria 或其他 API 一起使用吗?

在使用or方法NHibernate时,您可以轻松地从一级缓存中受益。但是,和呢?他们也使用一级缓存吗?LoadGetICriteriaHQLLinq-to-NHibernateQueryOver

0 投票
1 回答
13086 浏览

hibernate - 指定 hibernate.jdbc.batch_size 有什么意义?

这个 Hibernate 配置表面上应该控制有多少对象被缓存在一级缓存中。原因很容易理解,我们不想耗尽内存。

但有些事情让我很困惑。我见过的每个实现,包括这个网站 都有一个明确的刷新和清除。没问题,但是配置属性有什么意义呢?

注意:我在这里假设 Hibernate 以某种方式监视缓存的大小,并且如果某种类型的对象的数量增长到大于缓存大小,则将缓存与 db 同步。不知道这个假设是不是错???

0 投票
1 回答
2014 浏览

nhibernate - 从NHibernate的一级缓存中删除已删除的项目?或者:如何检查缓存的项目是否已被删除?

我们有一个棕地多用户应用程序(99% Delphi,1% .net),它使用 NHibernate 来保持 .net 模块的持久性。在我的应用程序中,我可以向某个实体添加类别。如果我选择一个并决定不使用它(从而再次删除类别),我已被 NHibernate 加载,并将留在会话的第一级缓存中。现在,如果其他用户删除此类别并且我尝试保存我的实体,我的应用程序将引发异常,因为加载的对象不再存在。

我的问题:有没有办法检查我的缓存是否加载了不再存在的项目?如果是这样,有没有办法从我的缓存中删除不存在的实体?

那么会发生什么: 我加载了一个实体(添加到会话缓存中) 我添加了一个类别(添加到会话缓存中) 其他人从数据库中删除了该类别。我保存了我的实体并发生异常,因为该类别不再存在。

它仍在会话缓存中。如果我可以(自动)从我的会话缓存中删除它会很好吗?有没有办法清理缓存并删除不再存在的对象?

问候,特德

0 投票
3 回答
89 浏览

c# - 使用 EF Code First 本地扩展

以下方法在我的服务层中正常工作:

但是当我尝试运行以下方法时,该方法返回由 GetAll() 方法加载的旧数据。

有什么问题,我该如何解决?
如何在此示例中使用本地方法并将新数据重新加载到本地(缓存)?

0 投票
2 回答
3368 浏览

hibernate - Hibernate 一级缓存与查询缓存

一级缓存与休眠中的查询缓存不同吗?我看过提到一级和查询缓存的文章,所以我很困惑。

0 投票
1 回答
154 浏览

entity-framework - EntityFramework 5 在同一上下文中两次命中数据库

在 MSDN for Entity Framework 5 中,.Find Methode 被描述为:

使用主键值尝试查找上下文跟踪的实体。如果实体不在上下文中,则将执行查询并针对数据源中的数据进行评估... http://msdn.microsoft.com/de-de/library/gg696418(v=vs.103) .aspx

但是,当我在同一上下文中使用“.Find”两次时,它也会两次访问数据库。我认为第一次尝试后,实体存储在上下文中。(一级缓存)我做错了什么?

Sql 探查器:

0 投票
2 回答
2881 浏览

java - JPA and first level cache, whats the point?

EntityManager maintains first level cache for retrieved objects, but if you want to have threadsafe aplication you're creating and closing entityManager for each transaction.

So whats the point of the level 1 cache if those entities are created and closed for every transaction? Or entityManager cache is usable if youre working in single thread?