Play 2.6:缓存API与内存使用配置问题咨询
Play框架Cache API内存限制配置指南
好问题!Play的Cache API本身是一个抽象接口,具体的内存限制配置取决于你使用的底层缓存实现,不过主流的缓存库都支持内存管控,而且完全可以通过application.conf来配置,和Play其他组件的配置逻辑保持一致。
一、默认Ehcache实现的配置
Play默认用Ehcache作为缓存后端,配置内存限制有两种方式:
- 如果你需要更精细的控制,可以指定自定义的Ehcache配置文件:
然后在play.cache.ehcache.config = ehcache.xmlehcache.xml里定义缓存的堆内存上限等参数:<cache name="default" maxEntriesLocalHeap="1000" <!-- 堆内存中最多存1000条数据 --> eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200"/> - 从Play 2.6版本开始,也支持直接在
application.conf里配置核心参数,不用写XML:play.cache.ehcache.default.cache.maxEntriesLocalHeap = 5000 play.cache.ehcache.default.cache.timeToLiveSeconds = 86400
二、用Caffeine替代的配置
如果你换成Caffeine(高性能的Java缓存库),先添加对应的依赖后,直接在application.conf里配置内存限制:
play.cache.caffeine.default.maximumSize = 10000 <!-- 最大缓存条目数 --> play.cache.caffeine.default.expireAfterAccess = 1h <!-- 1小时未访问自动过期 -->
如果想基于实际内存大小(而非条目数)限制,可以用maximumWeight搭配自定义的Weigher类来实现,具体逻辑可以参考Caffeine的原生配置规则。
三、几个关键提醒
- Play的Cache API本身不处理内存限制,所有管控逻辑都是底层缓存库实现的,所以配置时要对应你当前用的缓存实现。
- 不管用Ehcache还是Caffeine,都能通过
application.conf集中配置,和Play的数据库、路由等组件的配置方式统一。 - 如果你自己实现了缓存后端,那需要自己编写内存限制的逻辑,但一般来说没必要,主流库的方案已经很成熟了。
内容的提问来源于stack exchange,提问作者o-0
相关产品推荐
相关产品推荐

