逐出在 Infinispan 复制缓存中是如何工作的?

How does eviction work in a Infinispan replicated cache?

Infinispan 支持一种称为“复制”的缓存层类型,其中多个缓存(在不同的 JVM 甚至容器 instances/VMs/servers 中)的内容保持(异步)同步。我的问题是在这种情况下如何处理逐出 - 如果使用仅查看一个缓存的普通本地逐出算法,在我看来结果将是次优的,即在一个 JVM 中使用不多因此被逐出的条目可能是所有其他条目中最常用的(据我了解,由于它们之间的同步,这些条目也会被驱逐)...

您需要查看 Infinispan 用户指南的这一部分 https://infinispan.org/docs/stable/titles/configuring/configuring.html#eviction-and-expiration_configuring-memory-usage

正如您提到的,逐出是针对每个节点进行的,并删除被认为最近最少使用的条目。 (请注意,off JVM heap 和 on heap 的算法略有不同)。因此,如果您有 运行 个条目,则可能有一些节点有数据和没有数据。这反过来会导致每个节点可以看到的内容不一致。

如果你需要限制内存使用,这是逐出的要点,你需要做的就是保持所有节点之间的一致性,定义一个持久存储,比如文件存储,这将在下一篇中介绍https://infinispan.org/docs/stable/titles/configuring/configuring.html#persistence.

部分

请注意,到期与逐出不同,因为它是在集群范围内完成的。因此,如果您仍然希望所有节点之间的数据保持一致,如果对您的用例来说足够了,则可以使用过期时间。