【问题标题】:Infinispan cache objects not expiringInfinispan 缓存对象未过期
【发布时间】:2020-09-27 09:22:07
【问题描述】:

以下是其中一个应用程序的远程缓存设置;

  1. 远程缓存:Infinispan 部署在 Openshift 环境中 (Hotrod
    协议),没有定义驱逐策略。
  2. 给定对象(比如 X)在缓存中的生命周期为 10 秒。
  3. 此对象 (X) 每 5 秒使用它存储的密钥访问一次 在缓存中。

对象 (X) 是否会在 10 秒的生命周期后过期 - 因为同一对象 (X) 可能会在生命周期结束之前被访问?

【问题讨论】:

    标签: infinispan


    【解决方案1】:

    没错,生命周期将在给定的时间范围之后使条目过期,而不管对其执行的读取操作。如果值被更新,那么过期时间也将分别更新。

    如果您希望条目仅在未收到读取访问的 10 秒后过期,您应该使用 max

    【讨论】:

    • 在我们的例子中,我们看到了一种不同的行为,即缓存对象在 10 秒后没有过期,它需要将近 60 秒才能将缓存中的旧对象替换为针对特定键的新对象。 cache.putAsync(key, responseVO, 10, TimeUnit.SECONDS); 用于将元素放入缓存中,cache.get(key) 用于检索它。如果我将缓存中对象的访问频率更改为 10 秒而不是 5 秒,并且任何值(访问频率)低于 10 秒,则返回更新的对象。
    • 您如何验证它是否已过期?该条目应该已过期,但在被访问或过期收割机运行以将其删除之前不会将其删除。默认情况下,收割者每分钟运行一次。
    • 实际上,我正在使用 Postman 调用一个 REST API,该 API 首先在缓存中检查给定键,如果找到 - 返回其关联值,否则从数据库中获取值并放入缓存中。如果每 5 秒迭代调用一次 API,则返回陈旧数据(API 持续返回 60 秒内的陈旧数据)并且如果每 10 秒调用一次 API,则返回良好数据。我已经验证 API 没有缓存。
    • 我建议使用简单的复制器将问题记录到issues.redhat.com/projects/ISPN/issues。因为我在答案中所说的是预期的行为。
    • 我会按照建议进行。谢谢。
    猜你喜欢
    • 2014-04-01
    • 2018-10-28
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多