캐싱
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 요청 간에 디코딩된 레코드를 공유합니다. 벤치마크에 따르면 메모리 백엔드의 읽기는 콜드 상태에서 약 83 µs, STAT 검증을 거친 웜 캐시 적중 시 6 µs입니다.