问题标签 [evict]

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 投票
2 回答
16897 浏览

nhibernate - NHibernate Session.Evict 做什么?

下面的代码片段有什么作用?为什么使用Evict?

0 投票
1 回答
11921 浏览

asp.net-mvc - NHibernate 缓存问题 - 何时调用 Evict?

我遇到了一个明显的缓存问题,NHibernate 返回的内容与数据库中的内容不匹配。

我相信这是二级缓存数据。看起来我可以使用 Evict 来执行此操作,但实际上应该何时调用 Evict 方法? 对于我的特定应用程序,数据对于用户来说将是唯一的,并且提供的数据可能只会使用一次*。

我可以完全禁用这些对象集的 Level2 缓存吗?

更新 10/31

我的场景是这样的:我有一个购物车,客户将在其中添加和删除商品。我正在做的事情如下:在处理购物车的更新之前,我驱逐了CartandCartProduct实体。完成此操作后,我从提供程序检索列表CartProducts并返回视图(这发生在 .NET MVC 控制器中)。

更新 11/3

购物车已经完成,我遇到了一个似乎与同一个 NHibernate 问题有关的问题,但实际上是一个 MVC 问题。深入挖掘发现 HTML Helper 扩展覆盖了我假设的值并替换为 Model 状态中的值。所以对这个是双重打击。希望这可以帮助某人。

0 投票
1 回答
958 浏览

java - 休眠触发不必要的更新。为什么?

我有三层,即Action、Service、DAO 层。我已经使用 ID 为 123 的休眠从 DB 加载了一个对象(雇员类)。我对雇员对象进行了一些修改。后来,我创建了休眠业务对象并对其进行了一些修改。

在这种情况下,为什么它试图更新员工对象,即使我没有说要保存它?如何从会话中分离它?我不希望休眠更新员工对象。

0 投票
1 回答
190 浏览

c - 无法在核心 i7 机器中找到 L2 高速缓存逐出行的正确访问时间

我有核心 i7 系统,其 L1 缓存大小为 32KB,L2 缓存大小为 256KB,共享 L3 缓存大小为 8MB(在 4 个内核之间共享)。我编写了一个程序,在其中按顺序执行 A、B、C 部分。(A) 创建一个大小为 L2 缓存 4 倍的大 int 数组,并访问大数组的每 16 个元素(缓存行大小为 64B,16*4 B=64B),以确保我所有的数据都加载到 L2 中。记下大数组 (B) 的每个元素的访问时间,然后使用 clflush 从我的数据数组的多个位置手动逐出数据,例如 clflush(&bigarray[0]) ...clflush (&bigarray[1024])。(C) 再次访问大数组的每 16 个元素,包括在 (B) 中手动驱逐的那些行。

我在访问我的大数组的行之前和之后放置了 rdtsc() 以查找访问时间。我从i3 或 i7 处理器中的这个链接 clflush()了解了在 i3/i7 机器中使用 clflush

正如预期的那样,在驱逐单行后,我的访问时间越来越长,令我惊讶的是,多个位置的访问时间没有增加。

让我换个方式解释一下:

场景1:在 clflush 之前和之后访问单个数组元素

  • step1- 访问 (a[x]) 并找到访问时间
  • step2- 使用 clflush(&a[x]) 将其从缓存中逐出并查找访问时间

场景2:在 clflush 前后访问多个数组元素

  • step1-访问数组的每个元素 a[i]
  • 第2步-

    /li>

尽管我在 Scenario-1 中获得了预期的结果,但在 clflush 之后访问数组元素的访问时间并没有增加。

是什么原因 ?如何过来了解驱逐后的正确访问时间。听说过硬件和软件预取,它们会影响我的结果吗?如何克服那里的影响并了解正确的结果?

0 投票
1 回答
58 浏览

java - Jboss Cache:从缓存中驱逐的对象会发生什么?

如果Joss cache从节点中驱逐一个对象,并且同一对象从另一个对象引用它,则说objB。这种情况会导致任何问题吗?可以objB对被驱逐的对象进行操作吗?

提前致谢。

0 投票
1 回答
1132 浏览

spring - 使用 spring 的 cutom ehcache 驱逐策略

如果我们想自定义除 LRU LFU FIFO 之外的驱逐策略,文档推荐的方式是实现接口 Policy 然后将 MemoryStoreEvictionPolicy 设置为:

但如果我使用 spring,请使用 @cacheable 和 xml 文件,例如

我如何以春季方式注入自己的政策?

谢谢你们

0 投票
1 回答
613 浏览

spring - 试图驱逐二级缓存

我正在尝试驱逐持久性实体管理器中的二级缓存。看起来我可以使用 javax.persistence.Cache 接口中定义的以下函数:

为了获取 Cache 对象,我可以使用 javax.persistence.EntityManagerFactory 接口中定义的以下函数:

我这样连接我的 EntityManagerFactory:

使用以下 applicationContext 配置文件:

当我在对象上调用 getCache() 时,出现以下异常:

引起:java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerFactoryImpl.getCache()Ljavax/persistence/Cache; 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method .invoke(Method.java:597) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:376) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:517) com.sun.proxy.$Proxy26.getCache(Unknown Source) at com.rbccm.gelp.server.util.PersistenceManager.getCache(PersistenceManager.

这向我表明 getCache(在接口中定义)实际上并未在连接到 EntityManagerFactory 的对象中实现。所以,我在 setEntityManagerFactory(EntityManagerFactory emf) 中放了一个断点,我注意到对象的具体类型实际上是:org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean

当我浏览这个类的源代码时,可以确认这里没有实现getCache()。我相信我使用的是正确/兼容的版本:

  • 休眠 3.6.10
  • 春天 3.1.1
  • JPA 2.0

有没有人遇到过类似的问题或者能够重现这个问题?我该如何解决这个问题?如果不是,那么从二级缓存中驱逐所有缓存项的替代方法是什么?

0 投票
1 回答
295 浏览

c++ - 具有可变大小页面的缓冲池。当传入页面大于要驱逐的页面时,需要一种高性能的方式来合并页面

在数据库缓冲池(内存池)的实现中,我有一个由内存中的页面组成的缓冲区。

这些页面有不同的大小(都是 512kb 的整数倍)。

假设我的驱逐策略是 LRU(最近最少使用),但我试图驱逐的页面的大小小于我需要替换的大小,如果我也想遵循 LRU,我应该驱逐尽可能多的 LRU 页面以适应我的新页面。

假设我需要n驱逐最近使用的页面。然而,这些页面在缓冲/内存池中不一定是连续的。

我想到的一个简单方法是合并这些n页面,这意味着我需要适当地重新排序缓冲池。

最简单的方法是复制整个缓冲区并覆盖永久缓冲区并适当地更新数据类型。然而,这假设我们有足够的 RAM 来为这个操作复制整个缓冲区。有没有一种聪明的方法,我不必复制整个缓冲区?

谢谢

0 投票
2 回答
373 浏览

java - 如何使用缓存查询不同的字段/键?

我正在实现一个基于 Spring MVC 的 Web 应用程序,其中添加了缓存,但是现在在将更改应用于底层数据库时如何操作缓存方面遇到了问题。

我一直在研究 Ehcache ( http://ehcache.org/documentation ) 上的文档,但没有找到任何好的例子来解决我的问题。

假设我有一个 DAO 类,我选择在两个返回对象列表(不可编译的伪代码)的方法上应用缓存:

我正在使用自定义 KeyGenerator,所以我知道调用方法时如何生成键:

我需要解决的一个明显问题是,当向底层数据库添加或删除数据时,我应该如何实现缓存修改策略。

对于 store 方法,我发现这个问题很容易解决:

但是对于删除方法,事情变得更加复杂。

这是我迄今为止提出的一种实现,但它似乎比它应该的要复杂得多(昂贵)。如果我的设计模式是正确的,或者是否应该以任何其他方式解决我的问题,任何人都有任何有价值的意见?

也许这是解决它的正确方法?我还没有偶然发现任何解决这些问题的食谱,所以我在这里是最好的猜测。

0 投票
1 回答
95 浏览

nhibernate - NHibernate Evict - EntityKeys 是只读的,所以对象不会被驱逐

供应商使用 NHibernate 提供了代码......我对 NHibernate 一点也不熟悉。在代码中的某一时刻,它正在调用 Flush() 并引发错误,因为其中一个实体的日期值是 1/1/0001。我试图通过驱逐任何具有该值的实体来规避。但是,驱逐不起作用,因为 EntityKeys 设置为只读。

代码:

我也尝试过:

每当代码执行时,它都不会抛出任何错误,但也不会驱逐。当我尝试 RemoveAt 时,它抛出了“集合是只读的”。错误

有办法解决吗?