
# Almacenamiento en caché

storh incluye pequeños sistemas de caché sin dependencias en tiempo de ejecución:

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

Capas de caché:

- Registros DocStore decodificados
- Búsquedas negativas de registros inexistentes
- Manifiestos de SegmentedLog
- Índices dispersos de segmentos

Modos de validación:

- `CacheValidation::STAT`: valida la existencia, la fecha de modificación y el tamaño.
- `CacheValidation::HASH`: valida la existencia, la fecha de modificación, el tamaño y el hash del contenido.
- `CacheValidation::TRUST`: omite la validación del sistema de archivos en las coincidencias y confía en que la instancia actual de storh o una caché compartida publique las escrituras explícitas de storh.

`STAT` es el modo de validación rápida predeterminado. Use `HASH` cuando cada acierto de caché también deba validar el contenido del archivo, incluidas las escrituras del mismo tamaño que conservan la fecha de modificación. `STAT` no puede detectar un cambio de contenido externo que conserve tanto la fecha de modificación como el tamaño. `TRUST` es el modo más rápido para cargas de trabajo con un solo proceso o una caché compartida; intencionadamente no detecta archivos modificados fuera de storh.

`Cache::memory()` está limitado por el número de entradas y por los bytes. Si no se proporciona `maxBytes`, el presupuesto se calcula a partir de PHP's `memory_limit`.

`Cache::apcu()` es opcional. Si APCu no está disponible o está desactivado para el SAPI actual, funciona como un sistema de caché sin efecto.

## Cuándo conectar uno

`DocStore` siempre conserva pequeñas cachés por instancia de los registros que ya ha leído o escrito, validadas según el modo configurado. Al conectar un sistema de caché, se añade una caché que perdura más que la instancia: `Cache::memory()` ayuda a los procesos de larga duración que vuelven a abrir almacenes y `Cache::apcu()` comparte registros decodificados entre solicitudes de PHP-FPM. Los [resultados de pruebas](https://storh.inline0.dev/es/docs/benchmarks) miden unos 83 µs por lectura en frío frente a 6 µs por acierto en caliente validado con STAT con el sistema de caché en memoria.
