【问题标题】:Alternative cache policies in CaffeineCaffeine 中的替代缓存策略
【发布时间】:2020-04-11 14:22:26
【问题描述】:

在我的研究中,我跟踪并访问 Caffeine 的缓存中的某些项目。因此,我收集了自己的命中/未命中统计数据,这与 Caffeine 的内置统计数据不同。这适用于 Caffeine 的默认策略 - Window-TinyLFU。不过,我想对其他缓存策略执行相同的操作。

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

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

【问题讨论】:

    标签: caching policy lru caffeine


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 2010-10-06
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2012-09-05
      • 2020-08-03
      • 2011-11-12
      • 2011-01-18
      相关资源
      最近更新 更多