Preskočiť na obsah

Ukladanie do vyrovnávacej pamäte

storh obsahuje malé implementácie cache a nemá žiadnu závislosť za behu:

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

Vrstvy cache:

  • dekódované záznamy DocStore
  • negatívne vyhľadávania chýbajúcich záznamov
  • manifesty segmentovaného logu
  • riedke indexy segmentov

Režimy overovania:

  • CacheValidation::STAT: overuje existenciu, čas poslednej zmeny a veľkosť.
  • CacheValidation::HASH: overuje existenciu, čas poslednej zmeny, veľkosť a hash obsahu.
  • CacheValidation::TRUST: pri zásahu preskočí overovanie súborového systému a dôveruje aktuálnej inštancii storh alebo zdieľanému backendu cache, ktorý zverejňuje explicitné zápisy storh.

STAT je predvolený rýchly režim overovania. Použite HASH, keď sa pri každom zásahu do cache musí overiť aj obsah súboru vrátane zápisov rovnakej veľkosti, ktoré zachovajú čas poslednej zmeny. STAT nedokáže zistiť zmenu obsahu vykonanú mimo systému, ak sa nezmení čas poslednej zmeny ani veľkosť. TRUST je najrýchlejší režim pre procesy s jedným procesom alebo zdieľanou cache; zámerne nezisťuje zmeny súborov vykonané mimo storh.

Cache::memory() je obmedzená počtom položiek aj počtom bajtov. Ak sa nezadá maxBytes, rozpočet sa odvodí z PHP memory_limit.

Cache::apcu() je voliteľné. Ak APCu nie je dostupné alebo je pre aktuálne SAPI vypnuté, funguje ako prázdny backend.

Kedy pripojiť backend

DocStore vždy uchováva malé cache pre každú inštanciu pre záznamy, ktoré už prečítala alebo zapísala, pričom ich overuje podľa nakonfigurovaného režimu. Pripojením backendu sa pridá cache, ktorá pretrvá aj po zániku inštancie: Cache::memory() pomáha dlho bežiacim procesom, ktoré opätovne otvárajú úložiská, a Cache::apcu() zdieľa dekódované záznamy medzi požiadavkami PHP-FPM. testy výkonu ukazujú pri backende v pamäti približne 83 µs na studené čítanie oproti 6 µs na teplý zásah overený pomocou STAT.