
# Mise en cache

storh inclut des systèmes de cache légers et n'a aucune dépendance à l'exécution :

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

Couches de cache :

- enregistrements DocStore décodés
- recherches négatives pour les enregistrements manquants
- manifestes de SegmentedLog
- index clairsemés de segments

Modes de validation :

- `CacheValidation::STAT` : vérifie l'existence, la date de modification et la taille.
- `CacheValidation::HASH` : vérifie l'existence, la date de modification, la taille et le hachage du contenu.
- `CacheValidation::TRUST` : ignore la validation du système de fichiers en cas de succès et considère que l'instance storh actuelle ou un système de cache partagé publie explicitement les écritures storh.

`STAT` est le mode de validation rapide par défaut. Utilisez `HASH` pour que chaque accès au cache vérifie aussi le contenu des fichiers, y compris les écritures de même taille qui préservent la date de modification. `STAT` ne détecte pas les changements de contenu effectués hors bande qui préservent à la fois la date de modification et la taille. `TRUST` est le mode le plus rapide pour les charges de travail à processus unique ou à cache partagé ; il ne détecte volontairement pas les fichiers modifiés en dehors de storh.

`Cache::memory()` est limité par le nombre d'entrées et le nombre d'octets. Lorsque `maxBytes` n'est pas fourni, un budget est calculé à partir de PHP`memory_limit`.

`Cache::apcu()` est facultatif. Si APCu est indisponible ou désactivé pour le SAPI actuel, il fonctionne comme un système de cache inactif.

## Quand en ajouter un

`DocStore` conserve toujours de petits caches par instance pour les enregistrements déjà lus ou écrits, validés selon le mode configuré. L'ajout d'un système de cache fournit un cache qui survit à l'instance : `Cache::memory()` est utile aux processus de longue durée qui rouvrent des magasins, et `Cache::apcu()` partage les enregistrements décodés entre les requêtes PHP-FPM. Les [benchmarks](https://storh.inline0.dev/fr/docs/benchmarks) mesurent le système de cache en mémoire à environ 83 µs par lecture à froid, contre 6 µs pour un accès à chaud validé par STAT.
