文档

§配置 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
}

下一步:静态资源


发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。