【问题标题】:How does eviction work in a Infinispan replicated cache?驱逐在 Infinispan 复制缓存中是如何工作的?
【发布时间】:2022-02-07 22:02:12
【问题描述】:

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

【问题讨论】:

    标签: caching infinispan


    【解决方案1】:

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

    正如您提到的,逐出是按节点完成的,并删除被认为最近最少使用的条目。 (请注意,JVM 堆外和堆上的算法略有不同)。因此,如果条目用完,可能会有一些节点带有或不带有数据。这反过来又会导致与每个节点可以看到的不一致。

    如果你需要限制内存使用,这是驱逐的要点,你需要做的就是保持所有节点之间的一致性,就是定义一个持久存储,比如下一节中介绍的文件存储@ 987654322@.

    请注意,过期与驱逐的不同之处在于它是在集群范围内完成的。因此,如果您仍希望所有节点之间的数据保持一致,则可以使用过期来代替,前提是它足以满足您的用例。

    【讨论】:

    • 通过说只有插入和过期在复制缓存中同步/复制,而逐出是单独执行而不复制,来总结这一点是否正确?在这种情况下,当您创建一个复制缓存的附加实例时会发生什么 - 它最初是空的,只有复制到它的新插入将开始填充它,或者是否有一些逻辑可以复制现有缓存的现有内容(以及在这种情况下,将复制哪些内容,因为如果使用了驱逐,各种单独的缓存可能会有所不同)?
    • 驱逐仅在逐个节点的基础上执行,不会复制到其他节点。当一个新节点加入时,它将向每个数据集的主要所有者请求现有数据。
    • 感谢您的澄清@Mudokonman 非常感谢!
    猜你喜欢
    • 2015-11-07
    • 2019-03-17
    • 2014-11-23
    • 2013-12-14
    • 2014-08-02
    • 2018-02-14
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多