캐시 키 작업

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

캐시 정책을 사용하는 경우 캐시 키를 구성하여 캐시된 값 키의 고유성을 보장합니다. 구성 가능한 다른 값과 함께 캐시 키는 투입한 것과 동일한 데이터를 안정적으로 가져올 수 있는 방법을 제공합니다. PopulateCache 정책, LookupCache 정책, InvalidateCache 정책, ResponseCache 정책에서 캐시 키를 사용합니다.

Apigee는 구성 요소의 값(<Scope>, <CacheKey>/<Prefix>, <CacheKey>/<KeyFragment>)을 사용하여 캐시 키 값을 구성합니다. 이 값은 캐시의 값과 연결된 식별자입니다. 캐시 키 구성은 모든 캐시 정책에서 동일한 방식으로 작동합니다.

다음 캐시 정책 구성 요소를 사용하여 캐시 키를 만들 수 있습니다.

캐시 구성 요소 설명
<Scope> 또는 <CacheKey> / <Prefix> <Scope> 또는 <CacheKey> <Prefix> 요소를 사용하여 최종 캐시 키에 적용할 프리픽스를 구성합니다. <Scope>는 사전 정의된 값 목록을 열거합니다. <CacheKey> <Prefix> 요소는 <Scope>를 직접 선택한 고정 값으로 재정의합니다.
<CacheKey>/<KeyFragment> 캐시 항목에 대한 고유 식별자를 지정하기 위해 결합된 하나 이상의 <CacheKey> <KeyFragment> 요소를 사용합니다. KeyFragment 값은 정적 리터럴이거나 변수에서 설정할 수 있습니다.

Apigee는 프리픽스 부분과 복합 프래그먼트 부분의 두 부분으로 캐시 키를 구성하여 이중 밑줄로 구분합니다.

PREFIX_PART__FRAGMENT_PART

프리픽스 부분은 <Scope> 요소에 의해 결정되거나 <CacheKey> <Prefix> 요소가 있는 경우 결정됩니다. 프래그먼트 부분은 각 <KeyFragment> 요소의 각 값으로 구성되며 이중 밑줄로 결합됩니다.

응답 캐시 정책을 사용하면 동의 응답 헤더의 값을 사용하여 이 캐시 키를 추가할 수 있습니다.

<CacheKey> 사용

<CacheKey> 요소는 Apigee가 생성하는 각 캐시 항목의 고유 식별자(키)를 만드는 방법을 구성합니다. Apigee는 캐시된 값을 검색할 때 캐시 키를 사용하여 올바른 값을 찾습니다. ResponseCache 정책에서 하나의 구성은 캐싱 및 검색 키를 모두 정의합니다. PopulateCache 및 LookupCache 정책에서 각 정책의 <CacheKey> 요소가 동일해야 합니다. 그래야 캐시에서 검색된 값이 해당 입력 값과 일치하게 됩니다.

<CacheKey> 요소는 단일 옵션 <Prefix> 요소 및 하나 이상의 <KeyFragment> 요소를 포함할 수 있습니다. 런타임 시 Apigee는 각 부분에서 확인된 값을 두 밑줄 사이에 연결하여 캐시 키를 구성합니다.

예를 들어 다음 구성은 캐시 키에 사용할 myprefix__hello__world 값을 만듭니다.

<CacheKey>
    <Prefix>myprefix</Prefix>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>

다음과 같이 <KeyFragment> 요소에서 변수를 참조하여 동적으로 구성된 캐시 키를 사용하도록 Apigee를 구성할 수 있습니다.

<KeyFragment ref="variable_name"/>

예를 들어 캐시 키 값이 요청 메시지의 Content-Type을 통합하도록 하려면 아래와 같이 작업을 수행합니다.

<KeyFragment ref="request.header.Content-Type"/>

다음 구성을 고려하세요.

<CacheKey>
  <Prefix>system1</Prefix>
  <KeyFragment>apiAccessToken</KeyFragment>
  <KeyFragment ref="request.header.Content-Type" />
  <KeyFragment>bar</KeyFragment>
</CacheKey>

request.header.Content-Type 변수의 값이 application/json이면 캐시 키가 system1__apiAccessToken__application/json__bar가 됩니다.

ref 속성에 플랫폼 정의 변수 또는 커스텀 변수를 사용할 수 있습니다.

쿼리 매개변수에서 파생된 캐시 키

request.queryparam. <queryparam_name> 및 request.querystring과 같은 변수를 사용하여 키에 요청 쿼리 문자열의 일부가 포함되도록 구성할 수 있습니다. 예를 들어 다음 URL은 캐시 키에 사용할 수 있는 두 개의 쿼리 매개변수(param1 및 param2)를 사용합니다.

http://myaccount.apigee.net/mydata?param1=value1&param2=value2

<CacheKey> 요소는 이러한 값을 다음과 같은 구성과 통합할 수 있습니다.

<CacheKey>
    <KeyFragment ref="request.queryparam.param1" />
    <KeyFragment ref="request.queryparam.param2" />
<CacheKey>

런타임 시 캐시 키에는 아래와 같이 연결된 매개변수 값이 포함됩니다.

prefix_part__value1__value2

여러 개의 고유한 쿼리 매개변수를 지정하는 대신 전체 매개변수 문자열을 문자 그대로 캐시 키의 일부로 삽입하는 request.querystring 변수를 사용할 수도 있습니다. 이 메서드는 모든 매개변수를 고려하지만 매개변수 순서가 요청마다 다를 경우 키가 다르다는 점에 유의하세요. 즉, param1=value1&param2=value2param2=value2&param1=value1는 동일한 캐시 키 값을 가져오지 않습니다.

<Scope> 및 <Prefix> 사용

<Scope><CacheKey>/<Prefix> 요소는 캐시된 값을 네임스페이스로 구성하는 방법을 제공합니다. Apigee는 이 캐시에서 파생된 값을 캐시 키 앞에 추가합니다. 캐시 키에 범위나 프리픽스를 사용하면 InvalidateCache 정책을 한 번 호출하여 단일 프리픽스를 공유하는 모든 값을 무효화할 수 있다는 장점이 있습니다.

<Scope> 요소가 기본적으로 사용됩니다. 이는 넓은 범위에서 좁은 범위까지 나열한 값이며, 기본값은 가장 좁은 범위입니다. 다른 값을 지정하거나 <Prefix> 요소 값을 지정하지 않으면 이 기본값이 사용됩니다. <CacheKey> / <Prefix> 요소를 사용하여 <Scope> 값을 재정의할 수 있으므로 네임스페이스의 커스텀 값을 지정할 수 있습니다.

예를 들어 가장 광범위한 범위인 <Scope> 값 'Global'은 조직과 환경 이름을 나타냅니다. 따라서 프록시가 'mycompany'라는 조직에서 배포되고 'prod'라는 환경에서 배포된 경우 최종 값은 다음과 같습니다.

mycompany__prod__[FRAGMENT_PART]

LookupCache 정책에 설명된 대로 범위를 Global에서 Exclusive로 구체성을 높이도록 구성할 수 있습니다. Exclusive 범위는 가장 구체적이므로 주어진 캐시 내의 네임스페이스 충돌 위험을 최소화합니다. Exclusive 범위를 사용하는 각 캐시 항목은 다음 형식의 프리픽스가 붙습니다.

orgName__envName__apiProxyName__deployedRevisionNumber__nameof(proxyEndpoint|targetEndpoint)__[serializedCacheKey]

몇 가지 예를 들면 다음과 같습니다. 여기서는 'weatherapi'라는 프록시의 16번째 버전이 'mycompany'라는 조직과 'prod'라는 환경에 배포되고 proxyEndpoint 이름이 'default'이며 캐시 정책이 proxyEndpoint의 흐름에 연결된다고 가정합니다.

구성 결과

<Scope>Global</Scope>
<CacheKey>
  <KeyFragment>hello</KeyFragment>
  <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__hello__world할 수 있습니다.

<Scope>Exclusive</Scope>
<CacheKey>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
mycompany__prod__weatherapi__16__default__hello__world

<Scope>Exclusive</Scope>
<CacheKey>
    <Prefix>system1</Prefix>
    <KeyFragment>hello</KeyFragment>
    <KeyFragment>world</KeyFragment>
<CacheKey>
system1__hello__world