
# Memorare în cache

storh include backend-uri mici de cache și nu are dependențe la execuție:

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

Straturi de cache:

- înregistrări DocStore decodate
- căutări negative pentru înregistrări inexistente
- manifestele jurnalelor segmentate
- indexuri sparse pentru segmente

Moduri de validare:

- `CacheValidation::STAT`: validează existența, mtime și dimensiunea.
- `CacheValidation::HASH`: validează existența, mtime, dimensiunea și hash-ul conținutului.
- `CacheValidation::TRUST`: omite validarea sistemului de fișiere la accesările din cache și are încredere că instanța storh curentă sau un backend de cache partajat publică scrierile explicite storh

`STAT` este modul implicit de validare rapidă. Folosiți `HASH` când fiecare accesare din cache trebuie să valideze și conținutul fișierelor, inclusiv scrierile de aceeași dimensiune care păstrează mtime.
`STAT` nu poate detecta o modificare de conținut făcută în afara sistemului care păstrează atât mtime, cât și dimensiunea. `TRUST` este modul cel mai rapid pentru procese individuale sau sarcini cu cache partajat; intenționat, nu detectează fișierele modificate în afara storh.

`Cache::memory()` este limitat atât după numărul de intrări, cât și după octeți. Dacă `maxBytes` nu este furnizat, bugetul este calculat în funcție de PHP `memory_limit`.

`Cache::apcu()` este opțional. Dacă APCu nu este disponibil sau este dezactivat pentru SAPI-ul curent, funcționează ca backend fără operații.

## Când să atașați un backend

`DocStore` păstrează întotdeauna cache-uri mici pentru fiecare instanță, pentru înregistrările pe care le-a citit sau scris deja, validate conform modului configurat. Atașarea unui backend adaugă un cache care persistă mai mult decât instanța: `Cache::memory()` ajută procesele de lungă durată care redeschid stocări, iar `Cache::apcu()` partajează înregistrările decodate între solicitările PHP-FPM. [Benchmarkurile](https://storh.inline0.dev/ro/docs/benchmarks) măsoară backendul de memorie la aproximativ 83 µs pentru o citire la rece, față de 6 µs pentru o accesare la cald, validată prin STAT.
