Kešovanie
Pred databázou sú dve vrstvy:
- Pamäť v rámci requestu — vždy zapnutá. Žije počas jedného requestu alebo jedného jobu vo fronte: v kontajneri je naviazaná ako scoped a zahodí sa aj pri štarte jobu či pri prijatí requestu v Octane, takže dlhobežiaci worker nikdy neposiela hodnotu, ktorú medzitým zmenil iný proces.
- Trvalá cache — options.cache.enabled, predvolene zapnutá — v ľubovoľnom cache úložisku Illuminate. Zápisy ju aktualizujú a mazania záznam odstránia, takže každý proces uvidí zmenu od svojho ďalšieho requestu či jobu.
Čítanie skontroluje pamäť requestu, potom trvalé úložisko a nakoniec databázu (s návratom na default()). set() zapíše novú surovú hodnotu do oboch vrstiev a forget() ju z oboch odstráni — nič iné invalidovať netreba.
Surové hodnoty, nikdy casty
Obe vrstvy držia surový uložený reťazec, nikdy hodnotu po caste: šifrované nastavenie zostane v cache šifrovým textom a serializujú sa len skalárne hodnoty, takže ochrana unserialize v Laraveli (cache.serializable_classes) z Collection či Carbon v cache neurobí __PHP_Incomplete_Class. Každé čítanie surovú hodnotu pretypuje.
OPTIONS_CACHE_ENABLED=true
OPTIONS_CACHE_STORE=redis # null = the app’s default store
OPTIONS_CACHE_TTL=600 # seconds; null caches forever
OPTIONS_CACHE_PREFIX=options
OPTIONS_CACHE_TAG=optionsVyprázdnenie
Options::flushCache(); // clears the in-request memo and the persistent entriesphp artisan options:clear-cacheflushCache() aj options:clear-cache fungujú na každom úložisku. Každý kľúč v cache obsahuje token generácie a vyprázdnenie prejde na novú, takže starý záznam sa už neprečíta — ani v iných procesoch, od ich ďalšieho requestu či jobu. Úložisko s tagmi (Redis, Memcached) staré záznamy navyše hneď zmaže; na ostatných (file, database) vypršia podľa cache.ttl a pri TTL null zostanú, kým ich úložisko samo neodstráni.
Kľúče v cache
Trvalé kľúče majú tvar {prefix}:{generation}:options:{key}:{scope}, kde scope je global alebo md5 z morph triedy vlastníka s predponou jej dĺžky a z kľúča vlastníka — dvaja vlastníci tak nikdy nezdieľajú kľúč. Samotná generácia je uložená pod {prefix}:generation.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.