1

最近我将基于 Play Framework 的项目从Ehcache切换到Caffeine,因为 2.8 版的 Play 文档说“对于进程内缓存,Caffeine 通常是最佳选择。”

现在,我实施了一个小“测试”,以查看在驱逐某些项目之前可以将多少项目添加到缓存中。该测试只是在循环中将越来越多的项目添加到缓存中(没有明确的过期时间),检查每次插入操作后是否所有先前插入的项目仍然可用,直到检测到至少一个先前插入的项目丢失。

使用Ehcache,我发现限制显然是 10,000 项。在将这么多项目添加到缓存后,一些“旧”项目开始从缓存中消失。所以我的结论是,默认情况下, Ehcache具有 10,000 个项目的固定大小限制。另一方面,咖啡因似乎根本没有限制!我让测试运行了很长时间,但即使插入了大约 100 万个项目,之前插入的项目仍然没有被驱逐。那时我停止了测试。

那么,CaffeineEhcache不同,默认情况下没有大小限制吗?它会继续积累项目,直到最终我的应用程序因“内存不足”错误而崩溃,或者咖啡因中是否有一些逻辑会在“内存不足”的情况下驱逐项目?使用Caffeine时是否建议配置显式缓存大小限制?我会这么认为。但是,为什么 Play 默认不这样做呢?


不幸的是,Play Framework 的Cache 文档并没有明确说明Play 使用 Ehcache 和/或 Caffeine 的默认设置。此外,播放配置中的可用缓存选项列表(以及相应的默认值)将非常有帮助......

问候。

4

1 回答 1

3

这似乎是 Play 集成设置的默认值。

对于 ehcache,他们有一个配置文件ehcache-default.xml,最多有 10,000 个条目,过期时间为 120 秒。

对于咖啡因,他们有一个配置文件reference.conf,它没有指定任何约束。可以设置最大大小来限制条目的数量。

Caffeine 库没有任何隐式(任意)默认值,因为这可能令人惊讶并且通常是不正确的。如果指定了大小限制,则允许缓存增长略高于阈值以支持并发写入(否则所有针对排他锁的序列化),但不会因施加背压而遭受失控增长。

于 2021-08-16T09:12:15.297 回答