
# Buforowanie

storh zawiera niewielkie backendy pamięci podręcznej i nie wymaga zależności środowiska uruchomieniowego:

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

Warstwy pamięci podręcznej:

- zdekodowane rekordy DocStore
- negatywne wyszukiwania brakujących rekordów
- manifesty logu segmentowanego
- rzadkie indeksy segmentów

Tryby walidacji:

- `CacheValidation::STAT`: sprawdza istnienie, mtime i rozmiar.
- `CacheValidation::HASH`: sprawdza istnienie, mtime, rozmiar i hash zawartości.
- `CacheValidation::TRUST`: pomija walidację systemu plików przy trafieniach i ufa bieżącej instancji storh lub współdzielonemu backendowi pamięci podręcznej, który publikuje jawne zapisy storh.

`STAT` to domyślny, szybki tryb walidacji. Użyj `HASH`, gdy każde trafienie w pamięci podręcznej musi również sprawdzać zawartość pliku, w tym zapisy tej samej wielkości zachowujące mtime.
`STAT` nie wykryje zmiany zawartości spoza procesu, która zachowuje zarówno mtime, jak i rozmiar. `TRUST` to najszybszy tryb dla pojedynczego procesu lub obciążeń ze współdzieloną pamięcią podręczną; celowo nie wykrywa plików zmienionych poza storh.

`Cache::memory()` ma limity zarówno liczby wpisów, jak i liczby bajtów. Jeśli nie podano `maxBytes`, budżet jest wyliczany na podstawie PHP `memory_limit`.

`Cache::apcu()` jest opcjonalne. Jeśli APCu jest niedostępne lub wyłączone dla bieżącego SAPI, działa jak backend bez operacji.

## Kiedy podłączyć backend

`DocStore` zawsze przechowuje niewielkie pamięci podręczne dla każdej instancji, obejmujące rekordy, które zostały już odczytane lub zapisane i zweryfikowane zgodnie ze skonfigurowanym trybem. Podłączenie backendu dodaje pamięć podręczną, która działa dłużej niż sama instancja: `Cache::memory()` pomaga długotrwałym procesom, które ponownie otwierają magazyny, a `Cache::apcu()` udostępnia zdekodowane rekordy między żądaniami PHP-FPM. [Testy wydajności](https://storh.inline0.dev/pl/docs/benchmarks) pokazują, że backend pamięci operacyjnej osiąga około 83 µs przy zimnym odczycie i 6 µs przy ciepłym trafieniu zweryfikowanym przez STAT.
