web: Stale-while-revalidate-Cache für die öffentlichen Seitendaten
Start-/Kategorieseiten bauten nach Ablauf der 5-Minuten-TTL im Besucher- Request neu (~25-30 Archiv-Queries über ~100k PMs) — Long-Tail-Rubriken waren dadurch praktisch bei jedem Aufruf langsam. WebPageCache nutzt jetzt Cache::flexible([300, 3600]): Innerhalb 5 Min frisch wie bisher, danach wird bis zu 1 h sofort der alte Stand serviert und der Neuaufbau läuft nach der Response (deferred). HomePageData/CategoryPageData/TickerData laufen dafür über die gemeinsame WebPageCache-Konvention (Keys unverändert), die Hub-Kennzahlen über flexible([3600, 14400]). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
622cd4e289
commit
da189c05b6
6 changed files with 77 additions and 37 deletions
|
|
@ -7,17 +7,32 @@ use Illuminate\Support\Facades\Cache;
|
|||
|
||||
/**
|
||||
* Gemeinsame Cache-Konvention der öffentlichen Web-Seitendaten (HomePageData,
|
||||
* CategoryPageData, NewsroomDetail/NewsroomsPageData, SuchePageData,
|
||||
* CategoryNavigation). Bündelt die einheitliche TTL und den `web.`-Präfix an
|
||||
* einer Stelle, statt vier verschiedene Konstanten/Magic-Numbers zu pflegen.
|
||||
* CategoryPageData, TickerData, NewsroomDetail/NewsroomsPageData,
|
||||
* SuchePageData, CategoryNavigation). Bündelt TTL und `web.`-Präfix an einer
|
||||
* Stelle, statt mehrere Konstanten/Magic-Numbers zu pflegen.
|
||||
*
|
||||
* Stale-while-revalidate (Cache::flexible): Innerhalb der Frische-TTL kommt
|
||||
* der Wert direkt aus dem Cache. Danach wird bis zur Stale-Grenze sofort der
|
||||
* alte Stand serviert und der Neuaufbau läuft NACH der Response (deferred) —
|
||||
* Besucher zahlen den teuren Seitenaufbau (~25–30 Archiv-Queries) nicht mehr
|
||||
* im Request, solange die Seite mindestens einmal pro Stale-Fenster besucht
|
||||
* wird. Erst nach Ablauf der Stale-Grenze baut der Request wieder synchron.
|
||||
*/
|
||||
class WebPageCache
|
||||
{
|
||||
/**
|
||||
* Einheitliche Cache-Dauer der Web-Seitendaten in Sekunden.
|
||||
* Frische-Fenster der Web-Seitendaten in Sekunden: solange gilt der
|
||||
* Cache-Eintrag als aktuell und wird ohne Neuaufbau ausgeliefert.
|
||||
*/
|
||||
public const TtlSeconds = 300;
|
||||
|
||||
/**
|
||||
* Stale-Grenze in Sekunden (ab Cache-Write): bis hierhin wird ein
|
||||
* abgelaufener Eintrag noch serviert, während der Neuaufbau im
|
||||
* Hintergrund läuft.
|
||||
*/
|
||||
public const StaleSeconds = 3600;
|
||||
|
||||
/**
|
||||
* Baut einen `web.`-Cache-Key aus Segmenten (leere Segmente entfallen).
|
||||
*
|
||||
|
|
@ -41,6 +56,6 @@ class WebPageCache
|
|||
*/
|
||||
public static function remember(string $key, Closure $callback): mixed
|
||||
{
|
||||
return Cache::remember($key, self::TtlSeconds, $callback);
|
||||
return Cache::flexible($key, [self::TtlSeconds, self::StaleSeconds], $callback);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue