§配置 WS 缓存
Play WS 允许您从配置中设置 HTTP 缓存。
§启用缓存
您必须在 Play 应用程序中提供 JSR 107 缓存实现(也称为 JCache)才能使用 Play WS 的缓存功能。Play 附带了一个使用 ehcache 的实现,因此最简单的实现是在 build.sbt
中添加以下内容
libraryDependencies += ws
libraryDependencies += ehcache
并通过在 application.conf
中添加以下内容来启用 HTTP 缓存
play.ws.cache.enabled=true
如果未找到 JCache 实现,则 Play WS 将使用带有存根缓存的 HTTP 缓存,该缓存不存储任何内容。
§启用新鲜度启发式算法
默认情况下,Play WS 不会在没有传递显式缓存信息的情况下缓存 HTTP 响应。但是,HTTP 缓存确实有一个选项可以根据启发式算法缓存页面,以便即使没有远程服务器的配合,您也可以缓存响应。
要启用启发式算法,请在 application.conf
中设置以下内容
play.ws.cache.heuristics.enabled=true
Play WS 使用 LM-Factor 算法 来缓存 HTTP 响应。
§限制缓存大小
缓存大小受底层缓存实现的限制。Play WS 将在未找到缓存的情况下创建一个通用缓存,但您应该显式地绑定缓存,因为 JCache 没有提供很多选项。
注意:如果您不限制 HTTP 缓存或在缓存中过期元素,则可能会导致 JVM 耗尽内存。
在 ehcache 中,您可以通过显式指定 CacheManager 资源来指定现有缓存,该资源在 cachingProvider.getCacheManager(uri, environment.classLoader)
中使用
play.ws.cache.cacheManagerResource="ehcache-play-ws-cache.xml"
然后将以下缓存添加到 conf
目录中
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
name="play-ws-cache"
updateCheck="false"
>
<cache name="play-ws-cache" maxEntriesLocalHeap="10000" eternal="false"
timeToIdleSeconds="360" timeToLiveSeconds="1000" overflowToDisk="false" />
</ehcache>
注意:
play.ws.cache.cacheManagerURI
已被弃用,请使用play.ws.cache.cacheManagerResource
并指定类路径上的路径。
§调试缓存
要查看 Play WS 中的 HTTP 缓存层到底在做什么,请将以下内容添加到 logback.xml
中
<logger name="play.api.libs.ws.ahc.cache" level="TRACE" />
§定义缓存提供者
您可以为 WS 缓存定义一个特定的 CachingProvider,即使您已经在使用 ehcache
作为 Play Cache 的缓存提供者。例如,您可以加载 Caffeine 库
// https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/jcache
libraryDependencies += "com.github.ben-manes.caffeine" % "jcache" % "2.4.0"
然后指定 Caffeine JCache 作为缓存提供者
play.ws.cache.cachingProviderName="<jcache caching provider class name>"
§参考配置
参考配置显示了 Play WS 缓存的默认设置
# Copyright (C) from 2022 The Play Framework Contributors <https://github.com/playframework>, 2011-2021 Lightbend Inc. <https://www.lightbend.com>
play {
modules {
enabled += "play.api.libs.ws.ahc.AhcWSModule"
enabled += "play.libs.ws.ahc.AhcWSModule"
}
}
# Configuration settings for JSR 107 Cache for Play WS.
play.ws.cache {
# True if caching is enabled for the default WS client, false by default
enabled = false
# Calculates heuristic freshness if no explicit freshness is enabled
# according to https://tools.ietf.org/html/rfc7234#section-4.2.2 with LM-Freshness
heuristics.enabled = false
# The name of the cache
name = "play-ws-cache"
# A specific caching provider name (e.g. if both ehcache and caffeine are set)
cachingProviderName = ""
# The CacheManager resource to use. For example:
#
# cacheManagerResource = "ehcache-play-ws-cache.xml"
#
# If null, will use the ehcache default URI.
cacheManagerResource = null
# The CacheManager URI to use. If non-null, this is used instead of cacheManagerResource.
cacheManagerURI = null
}
下一步:静态资源
发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。