Saltar al contenido

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 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.