
# Välimuisti

storh sisältää pienet välimuistitaustajärjestelmät eikä vaadi ajonaikaisia riippuvuuksia:

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

Välimuistikerrokset:

- puretut DocStore-tietueet
- puuttuvien tietueiden negatiiviset haut
- segmentoitu lokin manifestit
- harvat segmentti-indeksit

Validointitilat:

- `CacheValidation::STAT`: tarkista olemassaolo, mtime ja koko.
- `CacheValidation::HASH`: tarkista olemassaolo, mtime, koko ja sisällön tiiviste.
- `CacheValidation::TRUST`: ohita tiedostojärjestelmän validointi osumien yhteydessä ja luota siihen, että nykyinen storh-instanssi tai jaettu välimuistitaustajärjestelmä julkaisee nimenomaiset storh-kirjoitukset.

`STAT` on oletusarvoinen nopea validointitila. Käytä tilaa `HASH`, kun jokaisen välimuistiosuman on tarkistettava myös tiedoston sisältö, mukaan lukien samankokoiset kirjoitukset, joissa mtime säilyy. `STAT` ei havaitse ulkopuolista sisällönmuutosta, jos sekä mtime että koko säilyvät. `TRUST` on nopein tila yhden prosessin tai jaetun välimuistin työkuormille; se ei tarkoituksella havaitse tiedostoja, joita muutetaan kohteen storh ulkopuolella.

`Cache::memory()` on rajattu merkintöjen määrän ja tavujen mukaan. Jos `maxBytes` ei anneta, budjetti lasketaan kohteen PHP-arvosta `memory_limit`.

`Cache::apcu()` on valinnainen. Jos APCu ei ole käytettävissä tai se on poistettu käytöstä nykyisessä SAPI:ssa, se toimii tyhjänä taustajärjestelmänä.

## Milloin välimuisti kannattaa liittää

`DocStore` pitää aina pienet instanssikohtaiset välimuistit lukemistaan tai kirjoittamistaan tietueista ja validoi ne määritetyn tilan mukaan. Taustajärjestelmän liittäminen lisää välimuistin, joka säilyy instanssia pidempään: `Cache::memory()` auttaa pitkäkestoisissa prosesseissa, jotka avaavat tallennuksia uudelleen, ja `Cache::apcu()` jakaa puretut tietueet PHP-FPM-pyyntöjen kesken. [Vertailutestien](https://storh.inline0.dev/fi/docs/benchmarks) mukaan muistitaustajärjestelmän kylmä luku kestää noin 83 µs ja lämmin, STAT-validoitu osuma 6 µs.
