
# Predpomnjenje

storh vključuje majhna zaledja za predpomnjenje in nima odvisnosti med izvajanjem:

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

Plasti predpomnilnika:

- dekodirani zapisi DocStore
- negativni zadetki pri iskanju manjkajočih zapisov
- manifesti segmentiranega dnevnika
- redki indeksi segmentov

Načini preverjanja:

- `CacheValidation::STAT`: preveri obstoj, mtime in velikost.
- `CacheValidation::HASH`: preveri obstoj, mtime, velikost in zgoščeno vrednost vsebine.
- `CacheValidation::TRUST`: pri zadetkih preskoči preverjanje datotečnega sistema in zaupa trenutnemu primerku storh ali skupnemu zaledju predpomnilnika, da objavlja izrecne zapise storh.

`STAT` je privzeti hitri način preverjanja. Uporabite `HASH`, kadar mora vsak zadetek v predpomnilniku preveriti tudi vsebino datoteke, vključno z zapisi enake velikosti, pri katerih se mtime ne spremeni.
`STAT` ne zazna spremembe vsebine zunaj sistema, če ostaneta mtime in velikost enaka. `TRUST` je najhitrejši način za enoprocesne delovne obremenitve ali delovne obremenitve s skupnim predpomnilnikom; namerno ne zazna datotek, spremenjenih zunaj storh.

`Cache::memory()` je omejen s številom vnosov in številom bajtov. Če `maxBytes` ni podan, izračuna proračun na podlagi PHP `memory_limit`.

`Cache::apcu()` je izbiren. Če APCu ni na voljo ali je za trenutni SAPI onemogočen, deluje kot zaledje brez učinka.

## Kdaj ga priključiti

`DocStore` vedno hrani majhne predpomnilnike na ravni primerka za zapise, ki jih je že prebral ali zapisal, in jih preverja glede na nastavljeni način. Priključitev zaledja doda predpomnilnik, ki preživi primerek: `Cache::memory()` je uporaben pri dolgotrajnih procesih, ki znova odpirajo shrambe, `Cache::apcu()` pa deli dekodirane zapise med zahtevami PHP-FPM. Primerjalni testi [Primerjalni testi](https://storh.inline0.dev/sl/docs/benchmarks) merijo približno 83 µs za hladno branje prek pomnilniškega zaledja in 6 µs za toplega zadetka, preverjenega z načinom STAT.
