gpt4 book ai didi

java - 防止条目从 Guava Cache 中被逐出

转载 作者:行者123 更新时间:2023-12-01 11:02:29 25 4
gpt4 key购买 nike

我正在查看 Guava Cache 示例,想知道是否有一种方法可以防止某些条目在某些情况下从缓存中被逐出。

就像,如果应用程序正在使用某个条目,您不太可能希望它被驱逐!

我能想到的一种方法是使用 CacheBuilder.weigher() 方法进行基于大小的驱逐,如 Javadoc 所述:

When the weight of an entry is zero it will not be considered for size-based eviction (though it still may be evicted by other means).

但是权重是在开始时计算的,并且在缓存条目的生命周期内是静态的。因此,当应用程序不再使用某个条目时,其权重不能设置为零。

还有其他有效的方法可以实现这一目标吗?就像,在驱逐特定条目之前,Guava Cache 会调用一个方法,无论它是否应该被驱逐!

此外,在 MVP 应用程序中缓存 Presenter 实例是一个坏主意吗?因为,我将使用 Guava Cache 在我的应用程序中缓存 Presenter 实例!

最佳答案

如果您不希望缓存条目在使用时被逐出,您应该使用 reference-based eviction ,具体来说.weakValues() 。一旦应用程序的其他部分没有引用该条目,这将从缓存中删除该条目。

如果您想使用基于引用的逐出一些其他逐出策略(例如,如果当前在其他地方没有引用,则在一小时后逐出),您可以使用两个同级缓存。一种使用引用驱逐,另一种使用定时驱逐。由于第二个缓存拥有强引用,它将阻止其他队列逐出条目(并且一旦定时缓存逐出,引用缓存将可以自由地执行此操作)。您可以将其实现为自定义 Cache 实现,以便调用者无需跟踪簿记。

关于java - 防止条目从 Guava Cache 中被逐出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33229776/

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