最近我将基于 Play Framework 的项目从Ehcache切换到Caffeine,因为 2.8 版的 Play 文档说“对于进程内缓存,Caffeine 通常是最佳选择。”
现在,我实施了一个小“测试”,以查看在驱逐某些项目之前可以将多少项目添加到缓存中。该测试只是在循环中将越来越多的项目添加到缓存中(没有明确的过期时间),检查每次插入操作后是否所有先前插入的项目仍然可用,直到检测到至少一个先前插入的项目丢失。
使用Ehcache,我发现限制显然是 10,000 项。在将这么多项目添加到缓存后,一些“旧”项目开始从缓存中消失。所以我的结论是,默认情况下, Ehcache具有 10,000 个项目的固定大小限制。另一方面,咖啡因似乎根本没有限制!我让测试运行了很长时间,但即使插入了大约 100 万个项目,之前插入的项目仍然没有被驱逐。那时我停止了测试。
那么,Caffeine与Ehcache不同,默认情况下没有大小限制吗?它会继续积累项目,直到最终我的应用程序因“内存不足”错误而崩溃,或者咖啡因中是否有一些逻辑会在“内存不足”的情况下驱逐项目?使用Caffeine时是否建议配置显式缓存大小限制?我会这么认为。但是,为什么 Play 默认不这样做呢?
不幸的是,Play Framework 的Cache 文档并没有明确说明Play 使用 Ehcache 和/或 Caffeine 的默认设置。此外,播放配置中的可用缓存选项列表(以及相应的默认值)将非常有帮助......
问候。