
# Vahemällu salvestamine

storh sisaldab väikeseid vahemälu taustsüsteeme ega vaja käitusajal lisasõltuvusi:

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

Vahemälukihid:

- dekodeeritud DocStore'i kirjed
- puuduvate kirjete negatiivsed otsingutulemused
- segmenteeritud logi manifestid
- hõredad segmendiindeksid

Valideerimisrežiimid:

- `CacheValidation::STAT`: kontrollib olemasolu, muutmisaega ja suurust.
- `CacheValidation::HASH`: kontrollib olemasolu, muutmisaega, suurust ja sisu räsi.
- `CacheValidation::TRUST`: vahelehelistel vahemälu tabamustel ei kontrollita failisüsteemi ning usaldatakse, et praegune storh instants või jagatud vahemälu taustsüsteem avaldab selgesõnalised storh kirjutamised.

`STAT` on kiire valideerimise vaikerežiim. Kasutage režiimi `HASH`, kui iga vahemälutabamuse korral tuleb kontrollida ka faili sisu, sealhulgas sama suurusega kirjutisi, mille puhul muutmisaeg säilib.
`STAT` ei tuvasta muutust väljaspool süsteemi, kui nii muutmisaeg kui ka suurus säilivad. `TRUST` on kiireim režiim ühe protsessi või jagatud vahemäluga töökoormuste jaoks; see ei tuvasta tahtlikult faile, mida on muudetud väljaspool storh.

`Cache::memory()` piiratakse kirjete arvu ja baitide järgi. Kui `maxBytes` pole esitatud,
arvutatakse eelarve PHP `memory_limit` põhjal.

`Cache::apcu()` on valikuline. Kui APCu pole saadaval või on praeguse SAPI jaoks keelatud,
töötab see tühja taustsüsteemina.

## Millal vahemälu lisada

`DocStore` hoiab alati väikest instantsipõhist vahemälu kirjete jaoks, mida see on juba lugenud või kirjutanud, ning valideerib neid seadistatud režiimi järgi. Taustsüsteemi lisamine loob instantsi elueast kauem püsiva vahemälu: `Cache::memory()` aitab kaua töötavaid protsesse, mis avavad hoidlaid korduvalt, ja `Cache::apcu()` jagab dekodeeritud kirjeid PHP-FPM-i päringute vahel. [Võrdlustestid](https://storh.inline0.dev/et/docs/benchmarks) näitavad, et mälu taustsüsteemi külm lugemine võtab umbes 83 µs, soe STAT-kontrolliga tabamus aga 6 µs.
