gpt4 book ai didi

java - 当 putifabsent 时间到期时做点什么 [infinispan]

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:09:20 25 4
gpt4 key购买 nike

简介

这是关于 infinispan 缓存的,但我认为这是一个足够通用的问题。

在我的 infinispan 缓存中,我使用 putIfAbsent 方法将项目输入到缓存中,并使用 remove 方法删除它们。 ( jboss doc here )

基本行为

我可以使用 id 将项目放入缓存并从缓存中删除项目。但是如果我没有显式地删除缓存项,infinispan 会在指定的生命周期过去后自动删除它。

在我的删除方法中,我在删除之前运行了一些自定义代码。但是当我没有调用 remove 方法时,infinispan 会因为提供的生命周期到期而删除缓存条目。

在那个自动删除场景中,我无法运行我的自定义代码,因为它发生在幕后。 (通过 infinispan)。那么可能的方法是什么?下面的代码将更有希望地解释这一点。

我相信我已经足够清楚了。请给我一些见识。谢谢。

void putToCache(String id){
myCache.putIfAbsent(id,value,LIFESPAN_DURATION,timeUnit);
}

void removeFromCache(String id){
//MY CUSTOM CODE - WANT TO RUN THIS IN LIFE SPAN DURATION EXPIRY ALSO
myCache.remove(id);
}

最佳答案

在进入答案之前,我想澄清驱逐和过期之间的区别。

驱逐

逐出是指由于条目超出配置的最大大小(最大条目)而从内存容器中删除条目。逐出只能在配置时启用,在运行时不受控制,过期可以,请参阅 here .请注意,如果您配置了一个条目,驱逐永远不会从商店中删除一个条目,因此如果您不想的话,您不会因为条目太多而丢失一个条目。

如您所见,Infinispan 7 和更早版本有一个 Eviction 监听器,引发的事件将 be this one .

有效期

过期定义了一个条目在一段时间不活动或设定的持续时间后被删除。这可以通过配置进行配置,或者您可以像在示例中那样使用 API 覆盖配置的值。

现在回答你的问题,Infinispan 8 添加了一个 Infinispan Expiration 事件。它更详细 here .请注意,一个重要的部分是到期事件将被触发,持有即将到期的 key 的锁(除非您的监听器被定义为异步)。这对于保证正确排序很重要。

您还应该记住,过期事件不能保证在条目过期时准确触发。相反,该事件仅在访问所述过期条目或过期收割器线程找到过期条目时才会触发。过期收割器默认每分钟运行一次,您可以禁用此功能或通过更改过期间隔配置设置来更改时间。

关于java - 当 putifabsent 时间到期时做点什么 [infinispan],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com