
# Caching

storh leveres med små cachebackends og uden runtime-afhængigheder:

```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
);
```

Cachelag:

- afkodede DocStore-poster
- negative opslag for manglende poster
- SegmentedLog-manifester
- sparsomme segmentindekser

Valideringstilstande:

- `CacheValidation::STAT`: kontrollér eksistens, mtime og størrelse.
- `CacheValidation::HASH`: kontrollér eksistens, mtime, størrelse og indholdshash.
- `CacheValidation::TRUST`: spring filsystemvalidering over ved cachehits, og stol på, at den aktuelle storh-instans eller en delt cachebackend offentliggør eksplicitte storh-skrivninger.

`STAT` er standardtilstanden for hurtig validering. Brug `HASH`, når hvert cachehit også skal kontrollere filindhold, herunder skrivninger af samme størrelse, der bevarer mtime.
`STAT` kan ikke registrere en indholdsændring uden for processen, hvis både mtime og størrelse bevares. `TRUST` er den hurtigste tilstand til processer med én proces eller delt cache; den registrerer med vilje ikke filer, der ændres uden for storh.

`Cache::memory()` er begrænset af antal poster og antal bytes. Hvis `maxBytes` ikke angives, beregnes en grænse ud fra PHPs `memory_limit`.

`Cache::apcu()` er valgfri. Hvis APCu ikke er tilgængelig eller er deaktiveret for den aktuelle SAPI, fungerer den som en backend uden funktion.

## Hvornår skal en tilføjes

`DocStore` har altid små cachelag pr. instans for poster, den allerede har læst eller skrevet, valideret efter den konfigurerede tilstand. Tilføjelse af en backend giver en cache, der overlever instansen: `Cache::memory()` hjælper langvarige processer, der genåbner lagre, og `Cache::apcu()` deler afkodede poster på tværs af PHP-FPM-anmodninger. [Benchmarks](https://storh.inline0.dev/da/docs/benchmarks) måler memory-backenden til omkring 83 µs pr. kold læsning mod 6 µs pr. varm, STAT-valideret cacheadgang.
