LocalResponseCache
GatewayFilter
ファクトリ
このフィルターを使用すると、レスポンスの本文とヘッダーをキャッシュして、次の規則に従うことができます。
本文のない GET リクエストのみをキャッシュできます。
HTTP 200 (OK)、HTTP 206 (部分的なコンテンツ)、または HTTP 301 (完全削除) のいずれかのステータスコードのレスポンスのみをキャッシュします。
Cache-Control
ヘッダーで許可されていない場合 (リクエストにno-store
が存在するか、レスポンスにno-store
またはprivate
が存在する場合)、レスポンスデータはキャッシュされません。レスポンスがすでにキャッシュされていて、
Cache-Control
ヘッダーに no-cache 値を指定して新しいリクエストが実行された場合、304 (変更なし) で本文のないレスポンスが返されます。
このフィルターは、ルートごとにローカルレスポンスキャッシュを構成し、spring.cloud.gateway.filter.local-response-cache.enabled
プロパティが有効になっている場合にのみ使用できます。また、グローバルに構成されたローカルレスポンスキャッシュも機能として利用できます。
キャッシュエントリの有効期限をオーバーライドする最初のパラメーター (秒は s
、分は m
、時間は h
で表される) と、このルートのエントリを削除するキャッシュの最大サイズを設定する 2 番目のパラメーター (KB
、MB
、GB
)。
次のリストは、ローカルレスポンスキャッシュ GatewayFilter
を追加する方法を示しています。
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("rewrite_response_upper", r -> r.host("*.rewriteresponseupper.org")
.filters(f -> f.prefixPath("/httpbin")
.localResponseCache(Duration.ofMinutes(30), "500MB")
).uri(uri))
.build();
}
またはこれ
application.yaml
spring:
cloud:
gateway:
routes:
- id: resource
uri: http://localhost:9000
predicates:
- Path=/resource
filters:
- LocalResponseCache=30m,500MB
このフィルターは、HTTP Cache-Control ヘッダーの max-age 値も自動的に計算します。元のレスポンスに max-age が存在する場合のみ、timeToLive 構成パラメーターで設定された秒数で値が書き換えられます。連続した呼び出しでは、この値は、レスポンスが期限切れになるまでの残りの秒数で再計算されます。 |
この機能を有効にするには、プロジェクトの依存関係として com.github.ben-manes.caffeine:caffeine と spring-boot-starter-cache を追加します。 |
プロジェクトでカスタム CacheManager Bean を作成する場合は、@Primary でマークするか、@Qualifier を使用して注入する必要があります。 |