
# Gyorsítótárazás

A(z) storh kis gyorsítótár-háttértárakkal és futásidejű függőség nélkül érkezik:

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

Gyorsítótárrétegek:

- dekódolt DocStore-rekordok
- hiányzó rekordok negatív keresései
- szegmentáltnapló-jegyzékek
- ritka szegmensindexek

Érvényesítési módok:

- `CacheValidation::STAT`: létezés, módosítási idő és méret ellenőrzése.
- `CacheValidation::HASH`: létezés, módosítási idő, méret és tartalomhash ellenőrzése.
- `CacheValidation::TRUST`: találat esetén kihagyja a fájlrendszer ellenőrzését, és megbízik az aktuális
  storh példányban vagy egy megosztott gyorsítótár-háttértárban, amely explicit storh
  írásokat tesz közzé.

A(z) `STAT` az alapértelmezett gyors érvényesítési mód. Akkor használja a(z) `HASH` módot, ha minden gyorsítótár-találatnál a fájl tartalmát is ellenőrizni kell, beleértve az azonos méretű, módosítási időt megőrző írásokat. A(z) `STAT` nem észleli a fájlon kívülről végzett olyan tartalommódosítást, amely megőrzi a módosítási időt és a méretet. A(z) `TRUST` a leggyorsabb mód egyfolyamatos vagy megosztott gyorsítótáras terhelésnél; szándékosan nem észleli a(z) storh hatókörén kívül módosított fájlokat.

A(z) `Cache::memory()` korlátozott a bejegyzések száma és a bájtok alapján. Ha nincs megadva a(z) `maxBytes`, a(z) PHP `memory_limit` értékéből számítja ki a keretet.

A(z) `Cache::apcu()` opcionális. Ha az APCu nem érhető el, vagy az aktuális SAPI-ban le van tiltva, üres háttértárként működik.

## Mikor érdemes csatolni egyet

A(z) `DocStore` mindig megtartja a már olvasott vagy írt rekordok kis, példányonkénti gyorsítótárát, a beállított mód szerinti érvényesítéssel. Egy háttértár csatolásával olyan gyorsítótárat ad hozzá, amely túléli a példányt: a(z) `Cache::memory()` hasznos a tárakat újranyitó, hosszan futó folyamatoknál, a(z) `Cache::apcu()` pedig dekódolt rekordokat oszt meg a(z) PHP-FPM kérései között. A [teljesítménymérések](https://storh.inline0.dev/hu/docs/benchmarks) szerint a memória-háttértár esetén a hideg olvasás körülbelül 83 µs, a meleg, STAT-ellenőrzésű találat pedig 6 µs.
