使用 Ehcache and/or Caffeine 时,Play Framework 中的(默认)缓存大小限制是多少?

What is the (default) Cache size limit in Play Framework when using Ehcache and/or Caffeine?

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

现在,我进行了一些“测试”,以查看在 一些 项被逐出之前可以将多少项添加到缓存中。该测试只是在循环中向缓存中添加越来越多的项(而没有 显式过期),检查所有先前插入的项是否仍然可用在每次插入操作之后,直到检测到至少一个先前插入的项目丢失。

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

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


不幸的是,Play Framework 的 Cache documentation 并没有明确说明 Play 与 Ehcache 一起使用的 default 设置and/or 咖啡因。此外,播放配置中的可用缓存选项列表(以及相应的默认值)将非常有用...

此致。

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

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

对于caffeine,他们有一个配置文件reference.conf that specifies no constraints. A maximum-size可以设置限制条目数。

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