0

在我的研究中,我只对其中的一些项目进行跟踪并访问 Caffeine 的缓存。因此,我收集了自己的命中/未命中统计数据,这与 Caffeine 的内置统计数据不同。这适用于 Caffeine 的默认策略 - Window-TinyLFU。但是,我想对其他缓存策略做同样的事情。

事实上,Caffeine 的模拟器建议了许多缓存策略,可以使用 application.conf 进行选择。文件。然而,AFAIK,模拟器的行为就像一个黑匣子——运行整个跟踪,制作自己的统计数据等。换句话说,虽然 Caffeine 的构建器允许定义一些参数(例如缓存的最大大小),但我没有找到任何在那里定义缓存策略的方法。

有没有办法做到这一点?我只对录取/驱逐感兴趣——(目前)我不使用基于时间的过期策略。提前非常感谢。

4

1 回答 1

0

Caffeine 的缓存库和它的模拟器应该独立对待。该库是为应用程序开发人员设计的,因此它是一个隐藏了重要复杂性并做出算法选择的黑匣子。模拟器用于研究,是一个可以直接修改的白盒。

只需 fork 存储库并根据需要修改模拟器。如果可能的话,我们可以将您的改进合并到上游,但有时这需要更多的工作,因为我们必须在个人研究之外维护代码。通过保留分叉,当我们在上游迭代时,您的工作不会被阻塞或延迟。这样,如果我们缺乏对需求的支持并且可以添加那些缺失的部分,您就不应该感到受到限制。

由于我们只有少数人使用该模拟器,因此您可以通过打开 Github 问题提出问题,也可以给我发电子邮件。它的结构相当简单:

  • 模拟器:编排流程以并行运行策略
  • 注册表:创建配置的策略
  • TraceReader:跟踪格式的解析器
  • PolicyActor:针对策略运行一批事件
  • 策略:跟踪其统计信息的替换算法
  • 记者:模拟打印出来的漂亮结果。
  • reference.conf:外部化配置

一个简单的例子是CaffeinePolicy,它从 Caffeine 的缓存适应模拟器的策略。直接算法,如SegmentedLruPolicy,包括一个可选的准入策略,用于其驱逐策略。

于 2020-04-11T17:45:13.520 回答