
# Mezipaměť

storh obsahuje malé implementace mezipaměti bez závislostí za běhu:

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

Vrstvy mezipaměti:

- dekódované záznamy DocStore
- negativní výsledky hledání chybějících záznamů
- manifesty segmentovaného logu
- řídké indexy segmentů

Režimy ověřování:

- `CacheValidation::STAT`: ověřuje existenci, čas změny a velikost.
- `CacheValidation::HASH`: ověřuje existenci, čas změny, velikost a hash obsahu.
- `CacheValidation::TRUST`: při nalezení přeskočí ověření souborového systému a důvěřuje aktuální instanci storh nebo sdílené mezipaměti, která publikuje explicitní zápisy storh.

`STAT` je výchozí rychlý režim ověřování. Použijte `HASH`, pokud se při každém zásahu do mezipaměti musí ověřit také obsah souboru, včetně zápisů stejné velikosti, které zachovají čas změny. `STAT` nedokáže odhalit změnu obsahu mimo systém, která zachová čas změny i velikost. `TRUST` je nejrychlejší režim pro úlohy v jednom procesu nebo se sdílenou mezipamětí; záměrně nezjišťuje změny souborů provedené mimo storh.

`Cache::memory()` má omezený počet záznamů i velikost v bajtech. Pokud není zadáno `maxBytes`, odvodí rozpočet z PHP's `memory_limit`.

`Cache::apcu()` je volitelná. Pokud APCu není k dispozici nebo je pro aktuální SAPI vypnutá, funguje jako prázdná implementace.

## Kdy ji připojit

`DocStore` vždy uchovává malé mezipaměti pro každou instanci pro záznamy, které již přečetla nebo zapsala, ověřené podle nakonfigurovaného režimu. Připojením backendu získáte mezipaměť, která přežije životnost instance: `Cache::memory()` pomáhá dlouho běžícím procesům, které znovu otevírají úložiště, a `Cache::apcu()` sdílí dekódované záznamy mezi požadavky PHP-FPM. [Benchmarky](https://storh.inline0.dev/cs/docs/benchmarks) naměřily u backendu v paměti přibližně 83 µs při chladném čtení oproti 6 µs při zahřátém zásahu ověřeném pomocí STAT.
