问题标签 [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 回答
849 浏览

spring - 如何使用部分键从我的二级 ehcache 中逐出(通过注释)?

我将 Hibernate 4.3.11.Final 与 ehcache 和 Spring 3.2.11.RELEASE 一起使用。我有以下 Spring/ehcache 配置……</p>

使用下面的自定义密钥生成器……</p>

如您所见,键是根据类名、方法名和任何参数生成的。我的问题是,如果我想从我的二级缓存中删除所有缓存键的第一个条目(因为我的键是一个数组)是“org.mainco.subco.standards.repo.StandardsDao”的条目,我该怎么写@CacheEvict 规则?以下不起作用……</p>

任何指导表示赞赏。一个限制是,不能选择使用多个二级缓存——我只能为这个应用程序使用一个(名为“main”的那个)。

0 投票
2 回答
246 浏览

c# - Nhibernate Session.Evict() 必须作用于代理对象吗?(或者是否有替代方法来克隆持久对象图?)

我正在尝试创建持久对象图的克隆,似乎 Session.Evict(PersistedObject) 是这样做的方法。通过从会话缓存中删除实例,我可以将其设置为新的“克隆”记录。

我尝试了三种方法,每种方法都不成功。

  1. 使用急切加载从数据库中获取我的对象图并尝试驱逐它。这会导致 KeyNotFoundException
  2. 使用 Session.Load(objectId) 并尝试驱逐它。驱逐有效,但我只有一个代理可以使用,而不是我需要的水合物体
  3. 使用 Session.Get(objectId) 并尝试驱逐它。这会导致 KeyNotFoundException

我一直在努力寻找有关此主题的任何真实文档或示例。我发现了一些接近的东西,但没有什么能真正解释我哪里出错了

关于最后一个链接,我检查了我的 Equals 和 GetHashCode 方法,但是在调用 Evict 时它们没有受到影响。此外, Session.Contains(objectToBeEvicted) 在 Evict() 之前返回 true

至于标题中的第二个问题——有没有更好的方法来解决这个问题?这不可能是罕见的情况

提前致谢

0 投票
1 回答
414 浏览

hazelcast - Hazelcast - 最旧的条目首先被驱逐

我正在使用 hazelcast 存储对小时间窗口很重要的数据(可能是 30 到 50 分钟,但不超过 60 分钟)。条目越旧,它就越不重要,这意味着如果我们可以摆脱一些条目以避免 OutOfMemory 将是较旧的条目。

我将这些条目的 TTL 配置为 60 分钟,但是当内存不足时,我想可靠地首先删除最旧的条目,即使它们没有过期。

我检查了配置,EvictionPolicy.LRU但配置它我可以看到一些最近添加到地图的条目正在被驱逐。我想这是由于这里解释的用于选择驱逐条目的采样算法。

是否有涵盖此用例的分布式对象的实现?

0 投票
1 回答
1629 浏览

hazelcast - HazelCast max-idle-seconds:驱逐侦听器不起作用

地图的 hazelcast 配置是

我为驱逐操作配置了一个侦听器。Listener 无法始终如一地捕捉到 evict 动作。Hazelcast 版本:3.6.5

侦听器类实现:

0 投票
2 回答
12314 浏览

java - 在多个键之一上缓存驱逐

在我的应用程序中,我有多个具有多个键的可缓存方法:

现在我想要一个 cachevict 方法,它清除只有#projectId 键(一个 UUID)匹配的所有缓存:

我在这篇文章中读到这是不可能的,而且

只有 evict 注释的键正则表达式匹配每个 cacheNames 中的多个元素

我不太确定他们的意思,但我想这与在SpEL中使用正则表达式有关。

所以我开始考虑将我的键连接成一个键:

并使用正则表达式将所有键与 projectId 后跟通配符匹配。但我真的找不到办法做到这一点。

我想要完成的事情可能吗?如果是这样,我该怎么做?

0 投票
2 回答
1452 浏览

caching - 有没有办法将 ehcache 配置为仅按时间顺序缓存一些元素?

我当前的配置如下,我打算只缓存最多 30 个元素,并在数量超过 30 时驱逐最旧的元素:

我有另一个计划的作业,它每分钟运行一次,将一个新元素放入缓存中。所以我希望在最近 30 分钟内只获得 30 个元素。但是到期/驱逐并不像预期的那样。一些非常旧的元素仍然保留,而最近 30 分钟内的一些元素却被意外驱逐。我在这里错过了什么吗?

我已经阅读了 ehcache 中的过期/驱逐相关文档,但没有找到任何线索。希望有人可以提供帮助:)

顺便说一句,ehcache 版本是 2.6.6

0 投票
2 回答
575 浏览

spring - Spring Redis Cache not evicting

The following works (results in the evict being performed):

But this does not work (nothing is evicted from the cache):

Why are my @CacheEvict annotations only called when the method is called straight from the controller?

I'm using Redis as the caching mechanism.

0 投票
3 回答
1919 浏览

java - 如何配置番石榴缓存以在读取后删除项目?

我想在从缓存中读取项目后删除(无效)项目。

所以项目应该存在于缓存中,直到第一次读取。

我试过添加expireAfterAccess(0, TimeUnit.NANOSECONDS),但没有填充缓存。

有没有办法以这种方式使用番石榴缓存,或者我需要在读取后手动使项目无效?

0 投票
0 回答
599 浏览

java - “内存”类型的驱逐不同于“计数”类型

我想使用 Infinispan 作为图像二进制数据(Java 类型byte[])的缓存。我假设 Infinispan 默认策略是 LIFO 或类似的策略,它更喜欢保留最近使用/添加的缓存实体。

在我的负载测试场景中,我总共进行了四次调用来检索给定的实体。假设第一个调用永远不会命中缓存(因为每一轮都请求一个唯一的实体),但接下来的三个总是命中缓存。所以预期的配置文件如下所示:

当我将 Infinispan 配置COUNT为具有一定数量实体的驱逐类型时,它可以完美运行:

统计数据显示运行结束时(以及中间)准确的 3/4 缓存命中: 在中间缓存 COUNT 类型的 JMX 统计信息

基于我在负载测试中捕获的数字的缓存命中率:(2952-738)/2952 = 0.75

当我更改要保留在内存中的实体数量(<binary eviction="COUNT" size="100" />)时,命中率不会改变(如预期的那样)。

在运行期间,我测量了负载测试前后的堆大小(在几次 GC 调用后进行的测量),结果表明 500 个实体大约需要114.895.000 - 62.445.000 = 52.450.000字节 = 每个实体大约 100KB: 最后缓存 COUNT 类型的堆统计信息

之后,我重新启动了应用程序,只对缓存配置进行了这个小改动:

我希望 Infinispan 的性能具有相同的配置文件,但是事实证明,一旦给定的内存量被完全分配,新添加的实体不会驱逐旧实体,而是立即被驱逐。这意味着大约在添加 100 个实体之后,所有四个请求缓存结果缓存未命中。可以看到该比率现在是 0.58 而不是 0.75: 最后缓存内存类型的堆统计信息

缓存命中率:(2952-738-504)/2952 = 0.579

如果我增加内存,命中率确实接近 0.75,但是我希望命中率相同,而与内存大小无关(假设内存至少可以容纳几个实体)。

一旦我将钝化配置为文件,基于内存的驱逐策略开始按预期工作:

在此处输入图像描述

Passivation → Attributes显示钝化次数为 1121(等于驱逐次数),Activation → Attributes显示激活次数为 1242。这意味着某些实体已被激活多次(并立即驱逐,这不好)。一般来说,我希望激活次数为零。

知道如何配置基于内存的驱逐策略,以使缓存命中率与基于计数的策略相同吗?

我读过的与上述相关的主题(他们没有直接回答上述问题):

0 投票
1 回答
399 浏览

hazelcast - hazelcast - 地图驱逐统计

hazelcast IMap 的驱逐可能是由于 ttl 过期,或者由于驱逐策略设置而达到某个阈值。

但是管理中心或 java 对象本身是否提供了有关如何驱逐条目以及出于什么原因的任何统计信息?

我无法在管理中心找到这样的指标,而且getLocalMapStatsIMap 上的方法似乎没有给出任何驱逐统计信息。

管理中心有一个名为“remove”的统计数据,但它的值(吞吐量/延迟)始终为 0。我猜它只是计算地图中的显式删除,而不是计算驱逐。

(我想另一种方法可能是根据http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Events/Event_Listener_for_Members/Listening_for_Map_Events.html添加驱逐列表并定义驱逐的自定义指标。)