NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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=options

Vyprázdnenie

Options::flushCache(); // clears the in-request memo and the persistent entries
php artisan options:clear-cache

flushCache() 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 kryptomien

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