Mise en cache
storh inclut des systèmes de cache légers et n'a aucune dépendance à l'exécution :
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 PHPmemory_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 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.