데이터 API 작성기에서 오랫동안 지원되는 수준 1(L1) 메모리 내 캐시 및 캐시 관련 HTTP 요청 헤더(예: no-store) no-cache및 only-if-cached 캐시 동작에 영향을 줍니다.
수준 2(L2) 캐시는 분산 캐시 계층을 추가하여 로컬 프로세스를 넘어 캐싱을 확장합니다. 캐시 L2된 결과를 여러 DAB 인스턴스에서 재사용할 수 있으며 개별 컨테이너 다시 시작에서 살아남을 수 있으므로 상태 비스테이션 배포는 적절한 방법으로 상태 비스테이션을 덜 느끼게 됩니다.
수준 2 캐시의 이점
다음을 수행하려는 경우 수준 2 캐시를 사용합니다.
- 확장된 DAB 인스턴스에서 캐시된 결과 공유
- 반복 읽기에 대한 데이터베이스 왕복 줄이기
- 재활용 또는 재배포 후 상태 비저장 컨테이너를 따뜻하게 유지
- 읽기 작업이 많은 워크로드의 성능 향상
- 파티션을 사용한 네임스페이스 캐시 참여
런타임 캐시 설정 구성
수준 2 캐시는 아래에서 전역적으로 구성됩니다 runtime.cache. 런타임 캐시 블록은 캐싱을 사용하도록 설정하고, TTL(기본 TTL)을 설정하며, 분산 캐시 공급자를 구성합니다.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level-2": {
"enabled": true,
"provider": "redis",
"connection-string": "localhost:6379",
"partition": "prod-api"
}
}
}
}
런타임 속성
| 재산 | 설명 |
|---|---|
enabled |
전역적으로 캐시 지원을 사용하도록 설정합니다. |
ttl-seconds |
기본 캐시 Time-to-Live(초)를 설정합니다. |
level-2.enabled |
분산 캐시 계층을 켭니다. |
level-2.provider |
분산 캐시 공급자를 선택합니다. 현재 redis 지원됩니다. |
level-2.connection-string |
Redis 인스턴스에 대한 연결 문자열입니다. |
level-2.partition |
Redis 키 및 백플레인 채널에 대한 선택적 네임스페이스입니다. 동일한 파티션을 사용하는 컨테이너만 동일한 분산 캐시 공간을 공유합니다. |
엔터티별 캐시 동작 구성
엔터티는 전역 캐시 동작을 재정의할 수 있습니다. 엔터티 cache 블록을 사용하여 캐싱을 사용하도록 설정하고, 사용자 지정 TTL을 설정하고, 캐시 수준을 선택합니다.
{
"entities": {
"Products": {
"source": "dbo.Products",
"cache": { "enabled": true, "ttl-seconds": 120, "level": "L1L2" }
},
"Orders": {
"source": "dbo.Orders",
"cache": { "enabled": true, "level": "L1" }
}
}
}
cache.level 속성
엔터티에서 사용하는 캐시 계층을 제어하는 데 사용합니다 cache.level .
| 가치 | 설명 |
|---|---|
L1 |
메모리 내 캐시에만 해당합니다. 현재 DAB 프로세스에 빠르고 로컬입니다. |
L1L2 |
메모리 내 및 분산 캐시. 이 수준은 캐시된 엔터티의 기본값입니다. |
전역적으로 사용하도록 설정되지 않은 경우 L2 구성된 L1L2 엔터티는 다음과 같이 L1동작합니다.
작동 방식 L1L2
팁 (조언)
Tl; DRL1L2 = 요청 → L1 → L2 → 데이터베이스 → L2 → L1 → 응답
기본적으로 캐싱을 사용하도록 설정된 엔터티는 수준을 L1L2사용합니다.
-
L1는 프로세스별 메모리 내 캐시입니다. -
L2는 현재 Redis인 분산 캐시 계층과 인스턴스 간 일관성을 위한 백플레인입니다.
L1L2 캐시 조회는 먼저 L1를 확인합니다. 누락 시 L1 수준 2 캐싱이 전역적으로 사용하도록 설정되고 구성되어 있는지 확인 L2 합니다. 두 계층에서 항목을 찾을 수 없으면 DAB에서 데이터베이스 쿼리를 실행합니다. 그런 다음 결과는 둘 다 L1 에 저장됩니다 L2.
이는 다음을 의미합니다.
- 동일한 인스턴스에 대한 향후 요청은 로컬에서 제공됩니다.
L1 - 다른 인스턴스에 대한 요청은 항목을 읽고
L2자체 항목으로 승격할 수 있습니다.L1 - 컨테이너가 다시 시작
L1되면 누락된 후 적중이L2계속되면 데이터베이스 왕복을 방지할 수 있습니다.
이 조합은 스케일 아웃 또는 재활용 인스턴스 간에 웜 분산 캐시를 제공합니다.
Redis 지원
Redis는 수준 2 캐시의 현재 공급자입니다. 다음을 지원하기 때문에 이 시나리오에 적합합니다.
- 여러 DAB 인스턴스에서 공유 액세스
- TTL 기반 캐싱에 대한 키 만료
- 처리량이 높은 워크로드에 대한 빠른 읽기 및 쓰기
- 인스턴스 간 백플레인 조정
분할된 캐시 공간
선택적 partition 설정을 사용하여 분산 캐시 작업을 격리합니다. DAB는 파티션 값을 사용하여 Redis 키와 백플레인 채널의 네임스페이스를 지정합니다. 동일한 파티션을 공유하는 컨테이너만 동일한 분산 캐시 공간에 참여합니다.
이 설정은 다음을 수행하려는 경우에 유용합니다.
- 별도의 프로덕션 및 비프로덕션 트래픽
- 테넌트 또는 환경 격리
- 관련 없는 서비스가 캐시된 항목을 공유하지 못하도록 방지