
# 캐싱

storh은 작은 캐시 백엔드를 기본 제공하며 런타임 종속성이 없습니다:

```php
use Storh\Cache;
use Storh\CacheValidation;

$docs = new Storh\DocStore($root, 'pages', cache: Cache::memory(maxEntries: 10000));
$docs = new Storh\DocStore($root, 'pages', cache: Cache::apcu('storh.pages'));
$docs = new Storh\DocStore(
    $root,
    'pages',
    cache: Cache::memory(maxEntries: 100000, maxBytes: 96 * 1024 * 1024),
    cache_validation: CacheValidation::TRUST
);
```

캐시 계층:

- 디코딩된 DocStore 레코드
- 레코드 누락에 대한 부정 조회 결과
- 분할 로그 매니페스트
- 희소 세그먼트 인덱스

검증 모드:

- `CacheValidation::STAT`: 존재 여부, 수정 시간 및 크기를 검증합니다.
- `CacheValidation::HASH`: 존재 여부, 수정 시간, 크기 및 콘텐츠 해시를 검증합니다.
- `CacheValidation::TRUST`: 캐시 적중 시 파일 시스템 검증을 건너뛰고 현재 storh 인스턴스 또는 공유 캐시 백엔드가 명시적 storh 쓰기를 게시한다고 신뢰합니다.

`STAT`은 기본 고속 검증 모드입니다. 캐시 적중 때마다 파일 내용을 검증해야 한다면 `HASH`을 사용하세요. 여기에는 수정 시간을 유지한 동일 크기 쓰기도 포함됩니다. `STAT`는 수정 시간과 크기가 모두 유지되는 외부 콘텐츠 변경을 감지할 수 없습니다. `TRUST`는 단일 프로세스 또는 공유 캐시 워크로드에서 가장 빠른 모드입니다. storh 외부에서 변경된 파일은 의도적으로 감지하지 않습니다.

`Cache::memory()`은 항목 수와 바이트 수로 제한됩니다. `maxBytes`이 제공되지 않으면 PHP의 `memory_limit`에서 예산을 산출합니다.

`Cache::apcu()`은 선택 사항입니다. 현재 SAPI에서 APCu를 사용할 수 없거나 비활성화되어 있으면 아무 작업도 하지 않는 백엔드처럼 동작합니다.

## 백엔드를 연결할 시점

`DocStore`은 이미 읽거나 쓴 레코드를 인스턴스별 소형 캐시에 항상 보관하며, 설정된 모드에 따라 검증합니다. 백엔드를 연결하면 인스턴스가 종료된 뒤에도 유지되는 캐시가 추가됩니다. `Cache::memory()`은 저장소를 다시 여는 장기 실행 프로세스에 유용하고, `Cache::apcu()`는 PHP-FPM 요청 간에 디코딩된 레코드를 공유합니다. [벤치마크](https://storh.inline0.dev/ko/docs/benchmarks)에 따르면 메모리 백엔드의 읽기는 콜드 상태에서 약 83 µs, STAT 검증을 거친 웜 캐시 적중 시 6 µs입니다.
