
# Cachning

storh levereras med små cachebakändar och utan körningsberoenden:

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

Cachelager:

- avkodade DocStore-poster
- negativa sökningar efter saknade poster
- manifest för segmenterade loggar
- glesa segmentindex

Valideringslägen:

- `CacheValidation::STAT`: validera existens, mtime och storlek.
- `CacheValidation::HASH`: validera existens, mtime, storlek och innehållshash.
- `CacheValidation::TRUST`: hoppa över filsystemsvalidering vid cacheträffar och lita på den
  aktuella instansen storh eller en delad cachebakände för att publicera uttryckliga storh-skrivningar.

`STAT` är det snabba standardläget för validering. Använd `HASH` när varje cacheträff också måste
validera filinnehållet, inklusive skrivningar med samma storlek som bevarar mtime.
`STAT` kan inte upptäcka en ändring utanför processen som bevarar både mtime och
storlek. `TRUST` är det snabbaste läget för arbetsbelastningar med en process eller delad cache;
det upptäcker avsiktligt inte filer som ändrats utanför storh.

`Cache::memory()` begränsas av antalet poster och antalet byte. När `maxBytes` inte
anges härleds en budget från PHPs `memory_limit`.

`Cache::apcu()` är valfritt. Om APCu inte är tillgängligt eller inaktiverat för den aktuella
SAPI:n fungerar det som en bakände utan effekt.

## När ska en kopplas in

`DocStore` behåller alltid små cacheminnen per instans för poster som den redan har
läst eller skrivit, validerade enligt det konfigurerade läget. Genom att koppla in en bakände får du en
cache som överlever instansen: `Cache::memory()` hjälper långkörande
processer som öppnar om lager, och `Cache::apcu()` delar avkodade poster
mellan PHP-FPM-anrop. Benchmarkarna för [benchmarks](https://storh.inline0.dev/sv/docs/benchmarks) mäter
minnesbakänden till cirka 83 µs per kall läsning jämfört med 6 µs per varm,
STAT-validerad träff.
