
# Kešatmiņa

storh komplektā ir nelieli kešatmiņas aizmugursistēmu moduļi un nav izpildlaika atkarību:

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

Kešatmiņas slāņi:

- atkodēti DocStore ieraksti
- negatīvas meklēšanas rezultāti par neesošiem ierakstiem
- segmentētā žurnāla manifesti
- retināti segmentu indeksi

Pārbaudes režīmi:

- `CacheValidation::STAT`: pārbaudīt esamību, mtime un izmēru.
- `CacheValidation::HASH`: pārbaudīt esamību, mtime, izmēru un satura jaucējvērtību.
- `CacheValidation::TRUST`: trāpījumu gadījumā izlaist failu sistēmas pārbaudi un uzticēties
  pašreizējai storh instancei vai koplietojamai kešatmiņas aizmugursistēmai, kas publicē skaidrus storh
  ierakstus.

`STAT` ir noklusējuma ātrās pārbaudes režīms. Izmantojiet `HASH`, ja katrā kešatmiņas trāpījumā jāpārbauda arī faila saturs, tostarp tāda paša izmēra ierakstos, kas saglabā mtime.
`STAT` nevar noteikt satura izmaiņas ārpus sistēmas, ja saglabājas gan mtime, gan izmērs. `TRUST` ir ātrākais režīms vienam procesam vai koplietojamas kešatmiņas slodzēm; tas apzināti nenosaka failu izmaiņas ārpus storh.

`Cache::memory()` ir ierobežota gan pēc ierakstu skaita, gan baitiem. Ja `maxBytes` nav norādīts, tas aprēķina budžetu pēc PHP `memory_limit`.

`Cache::apcu()` nav obligāts. Ja APCu nav pieejams vai ir atspējots pašreizējai SAPI, tas darbojas kā tukša aizmugursistēma.

## Kad to pievienot

`DocStore` vienmēr uztur nelielas katras instances kešatmiņas ierakstiem, ko tā jau ir nolasījusi vai ierakstījusi, validējot tos atbilstoši konfigurētajam režīmam. Aizmugursistēmas pievienošana nodrošina kešatmiņu, kas saglabājas arī pēc instances darbības beigām: `Cache::memory()` palīdz ilgstoši darbojošiem procesiem, kas atkārtoti atver krātuves, bet `Cache::apcu()` koplieto atkodētos ierakstus starp PHP-FPM pieprasījumiem. [veiktspējas](https://storh.inline0.dev/lv/docs/benchmarks) etalonmērījumi rāda, ka auksta nolasīšana ar atmiņas aizmugursistēmu aizņem aptuveni 83 µs, bet silts, ar STAT validēts trāpījums — 6 µs.
