Cachovanie
Cachovanie je predvolene vypnuté. Po zapnutí sa vypočítaný výsledok metriky uchová v cache store na dobu TTL, takže vyťažené dashboardy neprepočítavajú rovnaké agregácie pri každom requeste.
Globálne zapnutie
// config/metrics.php
'cache' => [
'enabled' => env('METRICS_CACHE_ENABLED', false), // master switch
'store' => env('METRICS_CACHE_STORE'), // null = default store
'ttl' => env('METRICS_CACHE_TTL', 300), // seconds
'prefix' => 'metrics', // cache-key prefix
],Nastavte METRICS_CACHE_ENABLED=true a cachovať sa bude každá metrika.
Nastavenie pre jednu metriku
Každá metrika sa môže za behu prihlásiť alebo odhlásiť bez ohľadu na konfiguráciu:
| Metóda | Účinok |
|---|---|
cache(?int $ttl = null) | Zapne cachovanie; voliteľne prepíše TTL v sekundách. |
cacheFor(DateTimeInterface|int $ttl) | Zapne cachovanie do určitého okamihu alebo na N sekúnd. |
cacheKey(string $key) | Použije explicitný cache kľúč namiesto generovaného. |
dontCache() | Vypne cachovanie tejto metriky, aj keď ho konfigurácia zapína. |
use RoundlyConsulting\Metrics\Facades\Metrics;
Metrics::value()->count(User::query())->range('TODAY')->cacheFor(now()->addHour())->toArray();
Metrics::value()->count(User::query())->cache()->toArray(); // config TTL
Metrics::value()->count(User::query())->cache(600)->toArray(); // 10 minutes
Metrics::value()->count(User::query())->cacheFor(now()->endOfDay())->toArray(); // until midnight
Metrics::value()->count(User::query())->cache()->cacheKey('users:all')->toArray(); // explicit key
Metrics::value()->count(User::query())->dontCache()->toArray(); // always freshCache kľúče
Bez explicitného cacheKey() má kľúč tvar {prefix}:{md5} nad triedou metriky, jej kľúčom v registri, obdobím s vlastným začiatkom a koncom, pásmom reportingu aj pásmom aplikácie, presnosťou a spôsobom zaokrúhľovania, dotazom a agregáciou inline buildera a rozlišovačmi podľa typu — pri trende jednotka, dopĺňanie medzier a stĺpec sérií; pri hodnote nastavenia porovnania, pri progrese navyše cieľ; pri členení limit a preložený popis „Other“. Rôzne nastavené volania tej istej metriky — aj inline buildery oproti zaregistrovaným metrikám tej istej triedy — sa tak cachujú oddelene a nikdy nekolidujú.
Vlastný cacheKey() sa použije doslovne — prefix sa nepridá a zmena obdobia ho nezmení, preto si jeho jedinečnosť strážte sami. Cachuje sa len časť result, a to ako obyčajné dáta — result() z nich obnoví typovaný objekt a obálka okolo nej sa zostaví pri každom volaní. Prezentácia sa aplikuje pri každom čítaní a nikdy sa necachuje — formatUsing() aj popisy z labelUsing() pri členení.
Zabudnutie cachovaných výsledkov
Metrics::forget('revenue'); // every cached range/timezone/option of one registered metric
Metrics::forget($metric); // an unregistered metric instance (by its class)
Metrics::flushCache(); // every cached metric resultInvalidácia funguje na každom cache store, s tagmi aj bez nich: každý záznam si pamätá generáciu cache, v ktorej vznikol, a zabudnutie začne novú generáciu — staršie záznamy sa pri ďalšom čítaní prepočítajú a prepíšu na mieste. Platí to aj pre záznamy s vlastným cacheKey(). forget() pri nezaregistrovanom kľúči vyhodí UnknownMetricException.
TTL z .env
METRICS_CACHE_ENABLED prijíma true, false, 1, 0, on, off, yes a no; METRICS_CACHE_TTL je celý počet sekúnd od 1 do 31536000 (jeden rok) — reťazec, ktorý vytvorí .env, sa rešpektuje. Nepoužiteľné TTL alebo hodnota prepínača (napríklad METRICS_CACHE_ENABLED=disabled) vyhodí InvalidConfigurationException namiesto tichého návratu k predvolenej hodnote; prázdna hodnota (METRICS_CACHE_TTL=) sa považuje za nenastavenú a predvolenú hodnotu dostane.
Príznak fromCache v udalosti MetricCalculated prezradí, či išlo o zásah do cache — pozri Udalosti.
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.