Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.
Seite vorlesenetwa 10 Min.
Wenn ein Paket ein eigenes Cache-Backend bereitstellen soll, trennen Sie den Store, der das Speichern implementiert, vom Repository, das die Laravel-API bereitstellt. Mit Cache::extend() registrieren Sie eine Erzeugungsmethode; Laravel umhüllt den zurückgegebenen Store nicht automatisch mit einem Repository.Diese Seite basiert auf der Implementierung von Laravel Framework v13.39.0. Die Grundlagen finden Sie unter Cache, die Vorbereitung des Providers unter Paketentwicklung.
Die in cache.stores definierte Konfiguration und der Bezeichner des erzeugten Repositorys
Store
Illuminate\Cache\ArrayStore
Speichern und Lesen von Schlüsseln, Verwaltung der Ablaufzeiten
Repository
Illuminate\Cache\Repository
remember(), TTL-Umrechnung, Cache-Events usw.
CacheManager::build() ruft eine eigene Erzeugungsmethode für das konfigurierte driver auf, sofern vorhanden, und zwar noch vor den eingebauten Treibern. Verwenden Sie daher keine Namen wie redis oder array erneut, sondern einen paketspezifischen Namen.
Wenn ein anderes Paket den Cache in seinem boot() verwendet, kann eine Registrierung des Treibers in Ihrem eigenen boot() je nach Reihenfolge zu spät kommen. Registrieren Sie gemäß der offiziellen Dokumentation in register() einen booting-Callback der Anwendung.Das folgende Minimalbeispiel verwendet den Standard-ArrayStore, um den Registrierungsweg ohne externen Dienst zu prüfen. Es wird in src/MemoServiceProvider.php des Pakets Acme\Memo abgelegt.
<?phpnamespace Acme\Memo;use Illuminate\Cache\ArrayStore;use Illuminate\Cache\Repository;use Illuminate\Contracts\Foundation\Application;use Illuminate\Support\ServiceProvider;class MemoServiceProvider extends ServiceProvider{ public function register(): void { $this->app->booting(static function (Application $app): void { $app['cache']->extend('acme-memory', static function ( Application $app, array $config, ): Repository { $store = new ArrayStore( $config['serialize'] ?? false, $app['config']->get('cache.serializable_classes'), ); return $app['cache']->repository($store, $config); }); }); }}
Den Provider laden Sie etwa über die automatische Paketerkennung. Da dieser Provider nur die Erweiterung registriert, machen Sie ihn nicht zu einem verzögerten (deferred) Provider, damit er sowohl bei HTTP als auch bei Artisan geladen wird.
Das booting der Anwendung wird beim normalen Start ausgeführt, nachdem register() aller Provider abgeschlossen ist und bevor die jeweiligen boot() laufen. Es ist nicht dasselbe wie $this->booting() des Providers selbst.
Der Callback von extend() erhält die Anwendung und das Konfigurations-Array des Stores. Erzeugen Sie den Store und bauen Sie externe Verbindungen in diesem Erzeugungs-Callback auf.
Dieser Registrierungszeitpunkt garantiert nicht die Nutzung des Caches innerhalb von register() anderer Provider. Trennen Sie die Registrierung von Diensten von ihrer tatsächlichen Nutzung.
Wenn Sie lediglich einen Standard-In-Memory-Cache benötigen, genügt der Treiber array. Dieses Beispiel dient der Erläuterung von Registrierung und Verträgen und eignet sich weder für prozessübergreifendes Teilen noch für Persistenz. Bei einem eigenen Backend ersetzen Sie die Erzeugung des ArrayStore durch eine Klasse, die Illuminate\Contracts\Cache\Store implementiert.
CacheManager::extend() bindet den Scope anonymer Closures an den Manager neu. Gehen Sie nicht davon aus, dass $this in einer nicht-statischen Closure der Provider ist, sondern verwenden Sie wie im Beispiel eine statische Closure und das Argument $app.
Fügen Sie das folgende Element dem bestehenden stores-Array in config/cache.php hinzu. Gestalten Sie das Paket nicht so, dass es default oder das gesamte stores der nutzenden Anwendung überschreibt.
use Illuminate\Support\Facades\Cache;$value = Cache::store('catalog')->remember('product:42', 60, function () { return ['id' => 42, 'name' => 'Sample'];});
Auch wenn Sie den Store per CACHE_STORE als Standard festlegen möchten, geben Sie dort nicht den Treibernamen an, sondern den Store-Namen catalog. Legen Sie mehrere Konfigurationen mit demselben Treiber an, wird für jeden Store-Namen ein eigenes Repository erzeugt.
CacheManager::callCustomCreator() gibt den Rückgabewert des Callbacks unverändert zurück. Geben Sie nur einen Store zurück, funktionieren zwar get() und put(), aber remember() und andere Methoden des Repositorys stehen nicht zur Verfügung, und auch die Interpretation der TTL ändert sich.repository($store, $config) im Beispiel übernimmt Folgendes:
Es umhüllt den Store mit Illuminate\Cache\Repository.
Es übergibt den vom Manager zur Konfiguration hinzugefügten store-Namen an das Repository.
Ist ein Event-Dispatcher registriert und die Einstellung events nicht deaktiviert, setzt es den Dispatcher im Repository.
Dabei werden nicht alle eigenen Einstellungen auf den Store angewendet. Verbindungsziel, Präfix, Serialisierung usw. setzen Sie in der Store-Implementierung und in der Erzeugungsmethode um. Das gilt auch für serialize, das im Beispiel aus der Konfiguration gelesen wird.
Den Store-Vertrag mit der aktuellen Implementierung abgleichen
Implementieren Sie die Methoden, die Illuminate\Contracts\Cache\Store in Laravel 13 verlangt. Verteilen Sie keine Liste leerer Methoden aus älteren Beispielen als funktionierenden Treiber.
Methode
Zu prüfendes Verhalten
get() / many()
Nicht vorhandene oder abgelaufene Einträge liefern null. many() gibt ein Array zurück, dessen Schlüssel die angefragten Schlüssel sind, wobei auch fehlende Einträge null sind
put() / putMany()
Speichert mit einer TTL in Sekunden und gibt Erfolg oder Misserfolg zurück
forever()
Speichert ohne Ablaufzeit. Das bedeutet nicht, dass eine Verdrängung oder Löschung durch das Backend verhindert wird
touch()
Ändert die Ablaufzeit eines vorhandenen Schlüssels. Gibt bei nicht vorhandenen oder abgelaufenen Einträgen false zurück
increment() / decrement()
Gibt den aktualisierten Wert oder einen Fehlschlag zurück. Prüfen Sie auch gleichzeitige Aktualisierungen und den Erhalt der TTL
forget()
Löscht den Schlüssel und gibt das Ergebnis zurück
flush()
Löscht den gesamten Cache. Machen Sie den tatsächlich gelöschten Umfang explizit
getPrefix()
Gibt das vom Store verwendete Schlüsselpräfix zurück
null wird vom Repository als Cache-Miss behandelt. Implementieren Sie den Store so, dass false oder 0 nicht als fehlend gelten. Auch das Speichern von null dient nicht als Markierung, die eine Neuberechnung durch remember() verhindert.
Repository::put() verarbeitet die TTL, bevor sie an den Store übergeben wird.
Aufruf am Repository
Verarbeitung im Store
put('key', $value)
forever()
put('key', $value, 60)
put() mit Sekundenangabe
put('key', $value, $expiresAt)
Umrechnung von Datum/Uhrzeit usw. in Sekunden, bei positivem Wert put()
put('key', $value, 0) oder negative TTL
forget()
touch('key', 60)
touch()
touch('key', 0) oder negative TTL
forget()
Der ArrayStore im Beispiel speichert einen Eintrag ohne Ablaufzeit, wenn Sie direkt an put()0 Sekunden übergeben. put(..., 0) am Repository bedeutet dagegen Löschen. Wenn Sie nur den mit getStore() geholten Low-Level-Store testen, prüfen Sie nicht das Verhalten der API, die Nutzer tatsächlich aufrufen.
Allein die Implementierung des Store-Vertrags garantiert nicht die Unterstützung aller Cache-Funktionen.
Atomares add(): Ist nicht Teil des Store-Vertrags. Bei einem Aufruf mit positiver TTL verwendet das Repository add() des Stores, sofern vorhanden. Andernfalls greift ein Fallback über get() und put(), sodass das bloße Umhüllen mit einem Repository keine Atomarität garantiert. Implementieren Sie es bei geteilten Backends mit den atomaren Operationen des jeweiligen Backends und prüfen Sie auch die gleichzeitige Ausführung.
Locks: lock() und restoreLock() aus Illuminate\Contracts\Cache\LockProvider sind ein separater Vertrag. Prüfen Sie das Erwerben, die Übereinstimmung des Besitzers, den Ablauf und dass Locks anderer Besitzer nicht freigegeben werden. Die Locks des ArrayStore im Beispiel bieten keinen prozessübergreifenden gegenseitigen Ausschluss.
Tags: Das Repository prüft, ob der Store tags() besitzt. In der Regel ist eine Implementierung etwa mit TaggableStore nötig; allein durch den Store-Vertrag werden Tags nicht automatisch aktiviert.
Gehen Sie nicht davon aus, dass flush() eine teilweise Löschung unter Berücksichtigung des konfigurierten Präfixes ist. Prüfen Sie den Löschumfang bei geteilten Backends und erläutern Sie ihn den Nutzern, einschließlich php artisan cache:clear.
Vorhalten von Instanzen und Löschen von Daten unterscheiden
CacheManager ist ein Singleton und hält auch das Ergebnis von store('catalog') pro Store-Namen vor. Eine Konfigurationsänderung oder eine erneute Registrierung per extend() allein aktualisiert bereits erzeugte Repositorys nicht.
use Illuminate\Support\Facades\Cache;$before = Cache::store('catalog');config(['cache.stores.catalog.serialize' => false]);$same = Cache::store('catalog');Cache::forgetDriver('catalog');$after = Cache::store('catalog');
$same ist dasselbe Objekt wie $before. Erst beim Abruf nach forgetDriver() wird $after aus der neuen Konfiguration erzeugt.
Operation
Ziel
Cache::forgetDriver('catalog')
Entfernt die vom Manager vorgehaltene Referenz auf das Repository
Cache::store('catalog')->forget('key')
Löscht einen gespeicherten Schlüssel
Cache::store('catalog')->flush()
Löscht alle Cache-Daten des Stores
forgetDriver() löscht nicht das gesamte Backend. Da der ArrayStore im Beispiel die Daten jedoch innerhalb der Instanz hält, sind alte Daten im neuen Store nicht sichtbar. Außerdem werden alte Repository-Referenzen nicht ersetzt, die von $before auf Nutzerseite oder vom bereits aufgelösten Singleton cache.store gehalten werden.Aktualisieren Sie in Produktion den Konfigurations-Cache im Rahmen des regulären Deployments und starten Sie langlebige Worker neu. Berücksichtigen Sie auch die Lebensdauer von Services und behandeln Sie eine erneute Auflösung nicht als gleichzeitige Aktualisierung aller Prozesse.
Nicht nur Fassaden-Mocks, sondern den Erzeugungsweg testen
Leiten Sie in der Testumgebung für Pakete die Aufrufe durch den echten Manager und das echte Repository. Das folgende Testbench-Beispiel prüft, dass der Treiber auch im boot() eines zuvor registrierten anderen Providers verfügbar ist. Im Beispiel wird ein Array gespeichert, ohne die Wiederherstellungsbeschränkung von cache.serializable_classes zu ändern, und mit ArrayStore::all(false) wird auch der rohe gespeicherte Wert geprüft.
Bei einem eigenen Backend prüfen Sie zusätzlich Ablauf, fehlende Schlüssel bei many(), den Hin- und Rückweg von false und 0, touch(), Verbindungsfehler, gleichzeitige Aktualisierungen sowie Präfix und Löschumfang. Ein bloß erfolgreiches Cache::shouldReceive('get') ist kein Beleg für die Treiberregistrierung oder die Kompatibilität mit einem externen Dienst.
Machen Sie Treibernamen, Store-Konfiguration, Serialisierungsformat sowie Exceptions und Rückgabewerte im Fehlerfall zur öffentlichen Spezifikation.
Prüfen Sie die Methoden des Store-Vertrags und optionale Funktionen wie Tags und Locks für jede unterstützte Laravel-Version.
Prüfen Sie, dass die Registrierung auch bei einem Neustart mit Konfigurations-Cache funktioniert und der Treiber aus dem boot() anderer Provider nutzbar ist.
Kündigen Sie Kompatibilitätsänderungen an gespeicherten Daten zusammen mit einer Strategie für die Migration oder das Verwerfen bestehender Schlüssel an.
Unterscheiden Sie zwischen dem Vorhalten von Instanzen im Prozess, den Daten im Backend und dem Konfigurations-Cache.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Knowledge of Laravel","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/light.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=df0b7397202a6aa1c1f321620c5aa146","dark":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/dark.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=a8a0340d86ff8aa90e9adfc98a0362d7","href":"/"},"favicon":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/favicon.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=8f5a03a681c95d31803fc237b5811065","api":{"playground":{"display":"simple"}},"navbar":{},"footer":{"socials":{"github":"https://github.com/invokable"}},"seo":{"metatags":{"canonical":"https://kawax.biz"},"indexing":"all"},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"navigation":{"languages":[{"language":"jp","default":true,"href":"jp/packages/laravel-boost-copilot-cli"},{"language":"en","href":"en/packages/laravel-boost-copilot-cli"},{"language":"de","href":"de/packages/laravel-boost-copilot-cli"},{"language":"es","href":"es/packages/laravel-boost-copilot-cli"},{"language":"fr","href":"fr/packages/laravel-boost-copilot-cli"},{"language":"it","href":"it/packages/laravel-boost-copilot-cli"},{"language":"ko","href":"ko/packages/laravel-boost-copilot-cli"},{"language":"nl","href":"nl/packages/laravel-boost-copilot-cli"},{"language":"zh-Hans","href":"zh-CN/packages/laravel-boost-copilot-cli"},{"language":"zh-Hant","href":"zh-TW/packages/laravel-boost-copilot-cli"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"invokable","hasAudioNarration":true,"actualSubdomain":"invokable","customDomains":["kawax.biz"],"gitSource":{"type":"github","owner":"kawax","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae3b81e20b92616c52730b6","collectionId":"dcfd0fdf-afc5-4921-b87f-97e730c28691","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae3b81e20b92616c52730b6"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae3b81e20b92616c52730b6","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"en","tag":"My Packages","count":145},{"language":"jp","tag":"マイパッケージ","count":145},{"language":"de","tag":"Meine Pakete","count":100},{"language":"es","tag":"Mis paquetes","count":100},{"language":"fr","tag":"Mes packages","count":100},{"language":"it","tag":"I miei pacchetti","count":100},{"language":"ko","tag":"My 패키지","count":100},{"language":"nl","tag":"Mijn packages","count":100},{"language":"zh-Hans","tag":"我的包","count":100},{"language":"zh-Hant","tag":"我的套件","count":100},{"language":"de","tag":"Fortgeschrittene Themen","count":70},{"language":"en","tag":"Advanced Topics","count":70},{"language":"es","tag":"Temas avanzados","count":70},{"language":"fr","tag":"Sujets avancés","count":70},{"language":"it","tag":"Argomenti avanzati","count":70},{"language":"jp","tag":"応用トピック","count":70},{"language":"ko","tag":"심화 주제","count":70},{"language":"nl","tag":"Geavanceerde onderwerpen","count":70},{"language":"zh-Hans","tag":"进阶主题","count":70},{"language":"zh-Hant","tag":"進階主題","count":70},{"language":"en","tag":"VOICEVOX","count":67},{"language":"jp","tag":"VOICEVOX","count":67},{"language":"de","tag":"Leitfaden","count":61},{"language":"en","tag":"Guide","count":61},{"language":"es","tag":"Guía","count":61},{"language":"fr","tag":"Guide","count":61},{"language":"it","tag":"Guida","count":61},{"language":"jp","tag":"ガイド","count":61},{"language":"ko","tag":"가이드","count":61},{"language":"nl","tag":"Gids","count":61},{"language":"zh-Hans","tag":"指南","count":61},{"language":"zh-Hant","tag":"指南","count":61},{"language":"de","tag":"Blog","count":46},{"language":"en","tag":"Blog","count":46},{"language":"es","tag":"Blog","count":46},{"language":"fr","tag":"Blog","count":46},{"language":"it","tag":"Blog","count":46},{"language":"jp","tag":"ブログ","count":46},{"language":"ko","tag":"블로그","count":46},{"language":"nl","tag":"Blog","count":46},{"language":"zh-Hans","tag":"博客","count":46},{"language":"zh-Hant","tag":"部落格","count":46},{"language":"en","tag":"VOICEVOX Engine API Reference","count":45},{"language":"jp","tag":"VOICEVOXエンジンAPIリファレンス","count":45},{"language":"de","tag":"GitHub Copilot","count":43},{"language":"en","tag":"GitHub Copilot","count":43},{"language":"es","tag":"GitHub Copilot","count":43},{"language":"fr","tag":"GitHub Copilot","count":43},{"language":"it","tag":"GitHub Copilot","count":43},{"language":"jp","tag":"GitHub Copilot","count":43},{"language":"ko","tag":"GitHub Copilot","count":43},{"language":"nl","tag":"GitHub Copilot","count":43},{"language":"zh-Hans","tag":"GitHub Copilot","count":43},{"language":"zh-Hant","tag":"GitHub Copilot","count":43},{"language":"de","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"en","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"es","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"fr","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"it","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"jp","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"ko","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"nl","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"zh-Hans","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"zh-Hant","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"de","tag":"Tutorial","count":35},{"language":"en","tag":"Tutorial","count":35},{"language":"es","tag":"Tutorial","count":35},{"language":"fr","tag":"Tutoriel","count":35},{"language":"it","tag":"Tutorial","count":35},{"language":"jp","tag":"チュートリアル","count":35},{"language":"ko","tag":"튜토리얼","count":35},{"language":"nl","tag":"Tutorial","count":35},{"language":"zh-Hans","tag":"教程","count":35},{"language":"zh-Hant","tag":"教學","count":35},{"language":"de","tag":"Paketentwicklung","count":32},{"language":"en","tag":"Package Development","count":32},{"language":"es","tag":"Desarrollo de paquetes","count":32},{"language":"fr","tag":"Développement de packages","count":32},{"language":"it","tag":"Sviluppo di pacchetti","count":32},{"language":"jp","tag":"パッケージ開発","count":32},{"language":"ko","tag":"패키지 개발","count":32},{"language":"nl","tag":"Package-ontwikkeling","count":32},{"language":"zh-Hans","tag":"包开发","count":32},{"language":"zh-Hant","tag":"套件開發","count":32},{"language":"de","tag":"SDK","count":27},{"language":"es","tag":"SDK","count":27},{"language":"fr","tag":"SDK","count":27},{"language":"it","tag":"SDK","count":27},{"language":"ko","tag":"SDK","count":27},{"language":"nl","tag":"SDK","count":27},{"language":"zh-Hans","tag":"SDK","count":27},{"language":"zh-Hant","tag":"SDK","count":27},{"language":"de","tag":"VOICEVOX","count":22},{"language":"es","tag":"VOICEVOX","count":22},{"language":"fr","tag":"VOICEVOX","count":22},{"language":"it","tag":"VOICEVOX","count":22},{"language":"ko","tag":"VOICEVOX","count":22},{"language":"nl","tag":"VOICEVOX","count":22},{"language":"zh-Hans","tag":"VOICEVOX","count":22},{"language":"zh-Hant","tag":"VOICEVOX","count":22}],"searchSettings":{"isFiltersEnabled":false,"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"de/advanced/package-cache-drivers","slug":"/de/advanced/package-cache-drivers","pageMetadata":{"title":"Eigene Cache-Stores und Verträge in Paketen","description":"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.","href":"/de/advanced/package-cache-drivers"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Wenn ein Paket ein eigenes Cache-Backend bereitstellen soll, trennen Sie `,_jsx(_components.strong,{children:`den Store, der das Speichern implementiert`}),`, vom `,_jsx(_components.strong,{children:`Repository, das die Laravel-API bereitstellt`}),`. Mit `,_jsx(_components.code,{children:`Cache::extend()`}),` registrieren Sie eine Erzeugungsmethode; Laravel umhüllt den zurückgegebenen Store nicht automatisch mit einem Repository.`]}),`\n`,_jsxs(_components.p,{children:[`Diese Seite basiert auf der Implementierung von Laravel Framework `,_jsx(_components.code,{children:`v13.39.0`}),`. Die Grundlagen finden Sie unter `,_jsx(_components.a,{href:`/de/cache`,children:`Cache`}),`, die Vorbereitung des Providers unter `,_jsx(_components.a,{href:`/de/advanced/package-development`,children:`Paketentwicklung`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`treibername-und-store-name-trennen`,children:`Treibername und Store-Name trennen`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Element`}),_jsx(_components.th,{children:`Beispiel auf dieser Seite`}),_jsx(_components.th,{children:`Rolle`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Treibername`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`acme-memory`})}),_jsxs(_components.td,{children:[`Die mit `,_jsx(_components.code,{children:`extend()`}),` registrierte Erzeugungsmethode`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Store-Name`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`catalog`})}),_jsxs(_components.td,{children:[`Die in `,_jsx(_components.code,{children:`cache.stores`}),` definierte Konfiguration und der Bezeichner des erzeugten Repositorys`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Store`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Illuminate\\\\Cache\\\\ArrayStore`})}),_jsx(_components.td,{children:`Speichern und Lesen von Schlüsseln, Verwaltung der Ablaufzeiten`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Repository`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Illuminate\\\\Cache\\\\Repository`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`remember()`}),`, TTL-Umrechnung, Cache-Events usw.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager::build()`}),` ruft eine eigene Erzeugungsmethode für das konfigurierte `,_jsx(_components.code,{children:`driver`}),` auf, sofern vorhanden, und zwar noch vor den eingebauten Treibern. Verwenden Sie daher keine Namen wie `,_jsx(_components.code,{children:`redis`}),` oder `,_jsx(_components.code,{children:`array`}),` erneut, sondern einen paketspezifischen Namen.`]}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n A[\"Cache::store('catalog')\"] --> B{\"catalog bereits aufgelöst?\"}\n B -->|Ja| C[\"Vorgehaltenes Repository zurückgeben\"]\n B -->|Nein| D[\"cache.stores.catalog laden\"]\n D --> E[\"Erzeugungsmethode für driver: acme-memory\"]\n E --> F[\"Store erzeugen und\u003cbr>mit repository() umhüllen\"]\n F --> G[\"Unter dem Namen catalog vorhalten\"]`}),`\n`,_jsx(Heading,{level:`2`,id:`vor-dem-boot-anderer-provider-registrieren`,children:`Vor dem boot anderer Provider registrieren`}),`\n`,_jsxs(_components.p,{children:[`Wenn ein anderes Paket den Cache in seinem `,_jsx(_components.code,{children:`boot()`}),` verwendet, kann eine Registrierung des Treibers in Ihrem eigenen `,_jsx(_components.code,{children:`boot()`}),` je nach Reihenfolge zu spät kommen. Registrieren Sie gemäß der offiziellen Dokumentation in `,_jsx(_components.code,{children:`register()`}),` einen `,_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`booting`}),`-Callback der Anwendung`]}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Das folgende Minimalbeispiel verwendet den Standard-`,_jsx(_components.code,{children:`ArrayStore`}),`, um den Registrierungsweg ohne externen Dienst zu prüfen. Es wird in `,_jsx(_components.code,{children:`src/MemoServiceProvider.php`}),` des Pakets `,_jsx(_components.code,{children:`Acme\\\\Memo`}),` abgelegt.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`28`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`28`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`php`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`namespace`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Acme\\\\Memo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ArrayStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Contracts\\\\Foundation\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Application`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ServiceProvider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` MemoServiceProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ServiceProvider`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` register`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`booting`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`static`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Application`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`extend`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'acme-memory'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`static`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Application`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` array`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $store`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ArrayStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'serialize'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`??`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'config'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.serializable_classes'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Den Provider laden Sie etwa über die `,_jsx(_components.a,{href:`/de/advanced/package-discovery`,children:`automatische Paketerkennung`}),`. Da dieser Provider nur die Erweiterung registriert, machen Sie ihn nicht zu einem verzögerten (deferred) Provider, damit er sowohl bei HTTP als auch bei Artisan geladen wird.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Das `,_jsx(_components.code,{children:`booting`}),` der Anwendung wird beim normalen Start ausgeführt, nachdem `,_jsx(_components.code,{children:`register()`}),` aller Provider abgeschlossen ist und bevor die jeweiligen `,_jsx(_components.code,{children:`boot()`}),` laufen. Es ist nicht dasselbe wie `,_jsx(_components.code,{children:`$this->booting()`}),` des Providers selbst.`]}),`\n`,_jsxs(_components.li,{children:[`Der Callback von `,_jsx(_components.code,{children:`extend()`}),` erhält die Anwendung und das Konfigurations-Array des Stores. Erzeugen Sie den Store und bauen Sie externe Verbindungen in diesem Erzeugungs-Callback auf.`]}),`\n`,_jsxs(_components.li,{children:[`Dieser Registrierungszeitpunkt garantiert nicht die `,_jsxs(_components.strong,{children:[`Nutzung des Caches innerhalb von `,_jsx(_components.code,{children:`register()`})]}),` anderer Provider. Trennen Sie die Registrierung von Diensten von ihrer tatsächlichen Nutzung.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Wenn Sie lediglich einen Standard-In-Memory-Cache benötigen, genügt der Treiber `,_jsx(_components.code,{children:`array`}),`. Dieses Beispiel dient der Erläuterung von Registrierung und Verträgen und eignet sich weder für prozessübergreifendes Teilen noch für Persistenz. Bei einem eigenen Backend ersetzen Sie die Erzeugung des `,_jsx(_components.code,{children:`ArrayStore`}),` durch eine Klasse, die `,_jsx(_components.code,{children:`Illuminate\\\\Contracts\\\\Cache\\\\Store`}),` implementiert.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager::extend()`}),` bindet den Scope anonymer Closures an den Manager neu. Gehen Sie nicht davon aus, dass `,_jsx(_components.code,{children:`$this`}),` in einer nicht-statischen Closure der Provider ist, sondern verwenden Sie wie im Beispiel eine statische Closure und das Argument `,_jsx(_components.code,{children:`$app`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`den-store-in-der-nutzenden-anwendung-hinzufügen`,children:`Den Store in der nutzenden Anwendung hinzufügen`}),`\n`,_jsxs(_components.p,{children:[`Fügen Sie das folgende Element dem bestehenden `,_jsx(_components.code,{children:`stores`}),`-Array in `,_jsx(_components.code,{children:`config/cache.php`}),` hinzu. Gestalten Sie das Paket nicht so, dass es `,_jsx(_components.code,{children:`default`}),` oder das gesamte `,_jsx(_components.code,{children:`stores`}),` der nutzenden Anwendung überschreibt.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'driver'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'acme-memory'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\Facades\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`remember`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` () {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'id'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 42`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'name'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Sample'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Auch wenn Sie den Store per `,_jsx(_components.code,{children:`CACHE_STORE`}),` als Standard festlegen möchten, geben Sie dort nicht den Treibernamen an, sondern `,_jsxs(_components.strong,{children:[`den Store-Namen `,_jsx(_components.code,{children:`catalog`})]}),`. Legen Sie mehrere Konfigurationen mit demselben Treiber an, wird für jeden Store-Namen ein eigenes Repository erzeugt.`]}),`\n`,_jsx(Heading,{level:`2`,id:`das-repository-selbst-zusammensetzen`,children:`Das Repository selbst zusammensetzen`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager::callCustomCreator()`}),` gibt den Rückgabewert des Callbacks unverändert zurück. Geben Sie nur einen Store zurück, funktionieren zwar `,_jsx(_components.code,{children:`get()`}),` und `,_jsx(_components.code,{children:`put()`}),`, aber `,_jsx(_components.code,{children:`remember()`}),` und andere Methoden des Repositorys stehen nicht zur Verfügung, und auch die Interpretation der TTL ändert sich.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`repository($store, $config)`}),` im Beispiel übernimmt Folgendes:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Es umhüllt den Store mit `,_jsx(_components.code,{children:`Illuminate\\\\Cache\\\\Repository`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Es übergibt den vom Manager zur Konfiguration hinzugefügten `,_jsx(_components.code,{children:`store`}),`-Namen an das Repository.`]}),`\n`,_jsxs(_components.li,{children:[`Ist ein Event-Dispatcher registriert und die Einstellung `,_jsx(_components.code,{children:`events`}),` nicht deaktiviert, setzt es den Dispatcher im Repository.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Dabei werden nicht alle eigenen Einstellungen auf den Store angewendet. Verbindungsziel, Präfix, Serialisierung usw. setzen Sie in der Store-Implementierung und in der Erzeugungsmethode um. Das gilt auch für `,_jsx(_components.code,{children:`serialize`}),`, das im Beispiel aus der Konfiguration gelesen wird.`]}),`\n`,_jsx(Heading,{level:`2`,id:`den-store-vertrag-mit-der-aktuellen-implementierung-abgleichen`,children:`Den Store-Vertrag mit der aktuellen Implementierung abgleichen`}),`\n`,_jsxs(_components.p,{children:[`Implementieren Sie die Methoden, die `,_jsx(_components.code,{children:`Illuminate\\\\Contracts\\\\Cache\\\\Store`}),` in Laravel 13 verlangt. Verteilen Sie keine Liste leerer Methoden aus älteren Beispielen als funktionierenden Treiber.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Methode`}),_jsx(_components.th,{children:`Zu prüfendes Verhalten`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`get()`}),` / `,_jsx(_components.code,{children:`many()`})]}),_jsxs(_components.td,{children:[`Nicht vorhandene oder abgelaufene Einträge liefern `,_jsx(_components.code,{children:`null`}),`. `,_jsx(_components.code,{children:`many()`}),` gibt ein Array zurück, dessen Schlüssel die angefragten Schlüssel sind, wobei auch fehlende Einträge `,_jsx(_components.code,{children:`null`}),` sind`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`put()`}),` / `,_jsx(_components.code,{children:`putMany()`})]}),_jsx(_components.td,{children:`Speichert mit einer TTL in Sekunden und gibt Erfolg oder Misserfolg zurück`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`forever()`})}),_jsx(_components.td,{children:`Speichert ohne Ablaufzeit. Das bedeutet nicht, dass eine Verdrängung oder Löschung durch das Backend verhindert wird`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`touch()`})}),_jsxs(_components.td,{children:[`Ändert die Ablaufzeit eines vorhandenen Schlüssels. Gibt bei nicht vorhandenen oder abgelaufenen Einträgen `,_jsx(_components.code,{children:`false`}),` zurück`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`increment()`}),` / `,_jsx(_components.code,{children:`decrement()`})]}),_jsx(_components.td,{children:`Gibt den aktualisierten Wert oder einen Fehlschlag zurück. Prüfen Sie auch gleichzeitige Aktualisierungen und den Erhalt der TTL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`forget()`})}),_jsx(_components.td,{children:`Löscht den Schlüssel und gibt das Ergebnis zurück`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`flush()`})}),_jsx(_components.td,{children:`Löscht den gesamten Cache. Machen Sie den tatsächlich gelöschten Umfang explizit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`getPrefix()`})}),_jsx(_components.td,{children:`Gibt das vom Store verwendete Schlüsselpräfix zurück`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`null`}),` wird vom Repository als Cache-Miss behandelt. Implementieren Sie den Store so, dass `,_jsx(_components.code,{children:`false`}),` oder `,_jsx(_components.code,{children:`0`}),` nicht als fehlend gelten. Auch das Speichern von `,_jsx(_components.code,{children:`null`}),` dient nicht als Markierung, die eine Neuberechnung durch `,_jsx(_components.code,{children:`remember()`}),` verhindert.`]}),`\n`,_jsx(Heading,{level:`3`,id:`die-ttl-über-das-repository-prüfen`,children:`Die TTL über das Repository prüfen`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Repository::put()`}),` verarbeitet die TTL, bevor sie an den Store übergeben wird.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Aufruf am Repository`}),_jsx(_components.th,{children:`Verarbeitung im Store`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`put('key', $value)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`forever()`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`put('key', $value, 60)`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`put()`}),` mit Sekundenangabe`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`put('key', $value, $expiresAt)`})}),_jsxs(_components.td,{children:[`Umrechnung von Datum/Uhrzeit usw. in Sekunden, bei positivem Wert `,_jsx(_components.code,{children:`put()`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`put('key', $value, 0)`}),` oder negative TTL`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`forget()`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`touch('key', 60)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`touch()`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`touch('key', 0)`}),` oder negative TTL`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`forget()`})})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Der `,_jsx(_components.code,{children:`ArrayStore`}),` im Beispiel speichert einen Eintrag ohne Ablaufzeit, wenn Sie direkt an `,_jsx(_components.code,{children:`put()`}),` `,_jsx(_components.code,{children:`0`}),` Sekunden übergeben. `,_jsx(_components.code,{children:`put(..., 0)`}),` am Repository bedeutet dagegen Löschen. Wenn Sie nur den mit `,_jsx(_components.code,{children:`getStore()`}),` geholten Low-Level-Store testen, prüfen Sie nicht das Verhalten der API, die Nutzer tatsächlich aufrufen.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`add-locks-und-tags-gesondert-prüfen`,children:`add, Locks und Tags gesondert prüfen`}),`\n`,_jsx(_components.p,{children:`Allein die Implementierung des Store-Vertrags garantiert nicht die Unterstützung aller Cache-Funktionen.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Atomares `,_jsx(_components.code,{children:`add()`})]}),`: Ist nicht Teil des Store-Vertrags. Bei einem Aufruf mit positiver TTL verwendet das Repository `,_jsx(_components.code,{children:`add()`}),` des Stores, sofern vorhanden. Andernfalls greift ein Fallback über `,_jsx(_components.code,{children:`get()`}),` und `,_jsx(_components.code,{children:`put()`}),`, sodass das bloße Umhüllen mit einem Repository keine Atomarität garantiert. Implementieren Sie es bei geteilten Backends mit den atomaren Operationen des jeweiligen Backends und prüfen Sie auch die gleichzeitige Ausführung.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Locks`}),`: `,_jsx(_components.code,{children:`lock()`}),` und `,_jsx(_components.code,{children:`restoreLock()`}),` aus `,_jsx(_components.code,{children:`Illuminate\\\\Contracts\\\\Cache\\\\LockProvider`}),` sind ein separater Vertrag. Prüfen Sie das Erwerben, die Übereinstimmung des Besitzers, den Ablauf und dass Locks anderer Besitzer nicht freigegeben werden. Die Locks des `,_jsx(_components.code,{children:`ArrayStore`}),` im Beispiel bieten keinen prozessübergreifenden gegenseitigen Ausschluss.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Tags`}),`: Das Repository prüft, ob der Store `,_jsx(_components.code,{children:`tags()`}),` besitzt. In der Regel ist eine Implementierung etwa mit `,_jsx(_components.code,{children:`TaggableStore`}),` nötig; allein durch den Store-Vertrag werden Tags nicht automatisch aktiviert.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Gehen Sie nicht davon aus, dass `,_jsx(_components.code,{children:`flush()`}),` eine teilweise Löschung unter Berücksichtigung des konfigurierten Präfixes ist. Prüfen Sie den Löschumfang bei geteilten Backends und erläutern Sie ihn den Nutzern, einschließlich `,_jsx(_components.code,{children:`php artisan cache:clear`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`vorhalten-von-instanzen-und-löschen-von-daten-unterscheiden`,children:`Vorhalten von Instanzen und Löschen von Daten unterscheiden`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager`}),` ist ein Singleton und hält auch das Ergebnis von `,_jsx(_components.code,{children:`store('catalog')`}),` pro Store-Namen vor. Eine Konfigurationsänderung oder eine erneute Registrierung per `,_jsx(_components.code,{children:`extend()`}),` allein aktualisiert bereits erzeugte Repositorys nicht.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\Facades\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`([`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.stores.catalog.serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$same`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forgetDriver`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`$same`}),` ist dasselbe Objekt wie `,_jsx(_components.code,{children:`$before`}),`. Erst beim Abruf nach `,_jsx(_components.code,{children:`forgetDriver()`}),` wird `,_jsx(_components.code,{children:`$after`}),` aus der neuen Konfiguration erzeugt.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Operation`}),_jsx(_components.th,{children:`Ziel`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Cache::forgetDriver('catalog')`})}),_jsx(_components.td,{children:`Entfernt die vom Manager vorgehaltene Referenz auf das Repository`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Cache::store('catalog')->forget('key')`})}),_jsx(_components.td,{children:`Löscht einen gespeicherten Schlüssel`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Cache::store('catalog')->flush()`})}),_jsx(_components.td,{children:`Löscht alle Cache-Daten des Stores`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`forgetDriver()`}),` löscht nicht das gesamte Backend. Da der `,_jsx(_components.code,{children:`ArrayStore`}),` im Beispiel die Daten jedoch innerhalb der Instanz hält, sind alte Daten im neuen Store nicht sichtbar. Außerdem werden alte Repository-Referenzen nicht ersetzt, die von `,_jsx(_components.code,{children:`$before`}),` auf Nutzerseite oder vom bereits aufgelösten Singleton `,_jsx(_components.code,{children:`cache.store`}),` gehalten werden.`]}),`\n`,_jsxs(_components.p,{children:[`Aktualisieren Sie in Produktion den Konfigurations-Cache im Rahmen des regulären Deployments und starten Sie langlebige Worker neu. Berücksichtigen Sie auch die `,_jsx(_components.a,{href:`/de/advanced/package-service-lifetimes`,children:`Lebensdauer von Services`}),` und behandeln Sie eine erneute Auflösung nicht als gleichzeitige Aktualisierung aller Prozesse.`]}),`\n`,_jsx(Heading,{level:`2`,id:`nicht-nur-fassaden-mocks-sondern-den-erzeugungsweg-testen`,children:`Nicht nur Fassaden-Mocks, sondern den Erzeugungsweg testen`}),`\n`,_jsxs(_components.p,{children:[`Leiten Sie in der `,_jsx(_components.a,{href:`/de/advanced/package-testing`,children:`Testumgebung für Pakete`}),` die Aufrufe durch den echten Manager und das echte Repository. Das folgende Testbench-Beispiel prüft, dass der Treiber auch im `,_jsx(_components.code,{children:`boot()`}),` eines zuvor registrierten anderen Providers verfügbar ist. Im Beispiel wird ein Array gespeichert, ohne die Wiederherstellungsbeschränkung von `,_jsx(_components.code,{children:`cache.serializable_classes`}),` zu ändern, und mit `,_jsx(_components.code,{children:`ArrayStore::all(false)`}),` wird auch der rohe gespeicherte Wert geprüft.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`87`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`87`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`php`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`namespace`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Acme\\\\Memo\\\\Tests`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Acme\\\\Memo\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`MemoServiceProvider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ArrayStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\Facades\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ServiceProvider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Orchestra\\\\Testbench\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`TestCase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` CacheConsumerProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ServiceProvider`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` boot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forever`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ready'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` PackageCacheTest`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` TestCase`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` protected`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getPackageProviders`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` array`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`CacheConsumerProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`MemoServiceProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` protected`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` defineEnvironment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'config'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.default'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'array'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'config'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.stores.catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'driver'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'acme-memory'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_the_driver_is_available_during_another_providers_boot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertInstanceOf`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Repository`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertInstanceOf`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ArrayStore`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ready'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNotNull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getEventDispatcher`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_serialization_is_applied_from_the_store_configuration`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'status'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'queued'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`put`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`serialize`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`all`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'value'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_a_zero_ttl_deletes_the_item_through_the_repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forever`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'old'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertTrue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`put`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'new'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_forgetting_a_driver_rebuilds_only_the_manager_reference`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $before`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`([`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.stores.catalog.serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forgetDriver`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNotSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ready'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'status'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'queued'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forever`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`all`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'value'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Bei einem eigenen Backend prüfen Sie zusätzlich Ablauf, fehlende Schlüssel bei `,_jsx(_components.code,{children:`many()`}),`, den Hin- und Rückweg von `,_jsx(_components.code,{children:`false`}),` und `,_jsx(_components.code,{children:`0`}),`, `,_jsx(_components.code,{children:`touch()`}),`, Verbindungsfehler, gleichzeitige Aktualisierungen sowie Präfix und Löschumfang. Ein bloß erfolgreiches `,_jsx(_components.code,{children:`Cache::shouldReceive('get')`}),` ist kein Beleg für die Treiberregistrierung oder die Kompatibilität mit einem externen Dienst.`]}),`\n`,_jsx(Heading,{level:`2`,id:`checkliste-für-die-langfristige-wartung`,children:`Checkliste für die langfristige Wartung`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Machen Sie Treibernamen, Store-Konfiguration, Serialisierungsformat sowie Exceptions und Rückgabewerte im Fehlerfall zur öffentlichen Spezifikation.`}),`\n`,_jsx(_components.li,{children:`Prüfen Sie die Methoden des Store-Vertrags und optionale Funktionen wie Tags und Locks für jede unterstützte Laravel-Version.`}),`\n`,_jsxs(_components.li,{children:[`Prüfen Sie, dass die Registrierung auch bei einem Neustart mit Konfigurations-Cache funktioniert und der Treiber aus dem `,_jsx(_components.code,{children:`boot()`}),` anderer Provider nutzbar ist.`]}),`\n`,_jsx(_components.li,{children:`Kündigen Sie Kompatibilitätsänderungen an gespeicherten Daten zusammen mit einer Strategie für die Migration oder das Verwerfen bestehender Schlüssel an.`}),`\n`,_jsx(_components.li,{children:`Unterscheiden Sie zwischen dem Vorhalten von Instanzen im Prozess, den Daten im Backend und dem Konfigurations-Cache.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`verwendete-primärquellen`,children:`Verwendete Primärquellen`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/docs/blob/960eedf0911155ad16326ade49c0ea5d18eda0b8/cache.md#adding-custom-cache-drivers`,children:`Offizielle Laravel-Dokumentation: Eigene Cache-Treiber`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/CacheManager.php`,children:`CacheManager: build, repository, extend, forgetDriver`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/Repository.php`,children:`Repository: TTL-Umrechnung, add, tags, Events`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Contracts/Cache/Store.php`,children:`Store-Vertrag`}),` / `,_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Contracts/Cache/LockProvider.php`,children:`LockProvider-Vertrag`})]}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/ArrayStore.php`,children:`ArrayStore: Speichern, Ablaufzeiten, Serialisierung`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/CacheServiceProvider.php`,children:`CacheServiceProvider: Singleton-Registrierung von Manager und cache.store`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Foundation/Application.php`,children:`Application: booting der Anwendung und boot der Provider`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/tests/Cache/CacheManagerTest.php`,children:`Offizielle Laravel-Tests: CacheManagerTest`}),` / `,_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/tests/Cache/CacheRepositoryTest.php`,children:`CacheRepositoryTest`})]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Eigene Cache-Stores und Verträge in Paketen","description":"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.","href":"/de/advanced/package-cache-drivers"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Treibername und Store-Name trennen","slug":"treibername-und-store-name-trennen","depth":2,"children":[]},{"title":"Vor dem boot anderer Provider registrieren","slug":"vor-dem-boot-anderer-provider-registrieren","depth":2,"children":[{"title":"Den Store in der nutzenden Anwendung hinzufügen","slug":"den-store-in-der-nutzenden-anwendung-hinzufügen","depth":3,"children":[]}]},{"title":"Das Repository selbst zusammensetzen","slug":"das-repository-selbst-zusammensetzen","depth":2,"children":[]},{"title":"Den Store-Vertrag mit der aktuellen Implementierung abgleichen","slug":"den-store-vertrag-mit-der-aktuellen-implementierung-abgleichen","depth":2,"children":[{"title":"Die TTL über das Repository prüfen","slug":"die-ttl-über-das-repository-prüfen","depth":3,"children":[]},{"title":"add, Locks und Tags gesondert prüfen","slug":"add-locks-und-tags-gesondert-prüfen","depth":3,"children":[]}]},{"title":"Vorhalten von Instanzen und Löschen von Daten unterscheiden","slug":"vorhalten-von-instanzen-und-löschen-von-daten-unterscheiden","depth":2,"children":[]},{"title":"Nicht nur Fassaden-Mocks, sondern den Erzeugungsweg testen","slug":"nicht-nur-fassaden-mocks-sondern-den-erzeugungsweg-testen","depth":2,"children":[]},{"title":"Checkliste für die langfristige Wartung","slug":"checkliste-für-die-langfristige-wartung","depth":2,"children":[]},{"title":"Verwendete Primärquellen","slug":"verwendete-primärquellen","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"narration":{"path":"de/advanced/package-cache-drivers","locale":"de","estimatedDurationSec":599},"subdomain":"invokable","siteName":"Knowledge of Laravel","title":"Eigene Cache-Stores und Verträge in Paketen - Knowledge of Laravel","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"jp":{"href":"/jp/advanced/package-cache-drivers","matchLevel":1},"en":{"href":"/en/advanced/package-cache-drivers","matchLevel":1},"de":{"href":"/de/advanced/package-cache-drivers","matchLevel":0},"es":{"href":"/es/advanced/package-cache-drivers","matchLevel":1},"fr":{"href":"/fr/advanced/package-cache-drivers","matchLevel":1},"it":{"href":"/it/advanced/package-cache-drivers","matchLevel":1},"ko":{"href":"/ko/advanced/package-cache-drivers","matchLevel":1},"nl":{"href":"/nl/advanced/package-cache-drivers","matchLevel":1},"zh-Hans":{"href":"/zh-CN/advanced/package-cache-drivers","matchLevel":1},"zh-Hant":{"href":"/zh-TW/advanced/package-cache-drivers","matchLevel":1}}},"lastModified":"2026-10-29T21:18:32.795Z","gitLastModified":"2026-10-29T21:17:56.000Z","originalFileLocation":"de/advanced/package-cache-drivers.mdx","locale":"de"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Eigene Cache-Stores und Verträge in Paketen - Knowledge of Laravel\">\u003cmeta data-mint-head property=\"og:description\" content=\"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://kawax.biz/de/advanced/package-cache-drivers\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://invokable.mintlify.app/_mintlify/api/og/v2?division=Paketentwicklung\u0026amp;title=Eigene+Cache-Stores+und+Vertr%C3%A4ge+in+Paketen\u0026amp;description=Analysiert+den+CacheManager+und+den+Store-Vertrag+von+Laravel+13+und+pr%C3%BCft+den+Registrierungszeitpunkt+von+Treibern%2C+die+TTL-Umrechnung+durch+das+Repository%2C+da\u0026amp;theme=e73cb59538246989d21d6ff5\u0026amp;signature=3ae448cc3d3ebdb90e86604dbea89363685882fb01d9eea531b5b57ca5b099b1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Eigene Cache-Stores und Verträge in Paketen - Knowledge of Laravel\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://invokable.mintlify.app/_mintlify/api/og/v2?division=Paketentwicklung\u0026amp;title=Eigene+Cache-Stores+und+Vertr%C3%A4ge+in+Paketen\u0026amp;description=Analysiert+den+CacheManager+und+den+Store-Vertrag+von+Laravel+13+und+pr%C3%BCft+den+Registrierungszeitpunkt+von+Treibern%2C+die+TTL-Umrechnung+durch+das+Repository%2C+da\u0026amp;theme=e73cb59538246989d21d6ff5\u0026amp;signature=3ae448cc3d3ebdb90e86604dbea89363685882fb01d9eea531b5b57ca5b099b1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://kawax.biz/de/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/de/advanced/package-cache-drivers.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://kawax.biz/de/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://kawax.biz/jp/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://kawax.biz/en/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://kawax.biz/es/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://kawax.biz/fr/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://kawax.biz/it/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://kawax.biz/ko/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"nl\" href=\"https://kawax.biz/nl/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https://kawax.biz/zh-CN/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hant\" href=\"https://kawax.biz/zh-TW/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://kawax.biz/jp/advanced/package-cache-drivers\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://kawax.biz/#organization\",\"name\":\"Knowledge of Laravel\",\"url\":\"https://kawax.biz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/light.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=df0b7397202a6aa1c1f321620c5aa146\"}},{\"@type\":\"WebSite\",\"@id\":\"https://kawax.biz#website\",\"name\":\"Knowledge of Laravel\",\"url\":\"https://kawax.biz\",\"publisher\":{\"@id\":\"https://kawax.biz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://kawax.biz/de/advanced/package-cache-drivers#webpage\",\"url\":\"https://kawax.biz/de/advanced/package-cache-drivers\",\"name\":\"Eigene Cache-Stores und Verträge in Paketen\",\"description\":\"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.\",\"dateModified\":\"2026-10-29T21:17:56.000Z\",\"isPartOf\":{\"@id\":\"https://kawax.biz#website\"},\"breadcrumb\":{\"@id\":\"https://kawax.biz/de/advanced/package-cache-drivers#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://kawax.biz/de/advanced/package-cache-drivers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Paketentwicklung\",\"item\":\"https://kawax.biz/de/advanced/package-development\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Eigene Cache-Stores und Verträge in Paketen\",\"item\":\"https://kawax.biz/de/advanced/package-cache-drivers\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://kawax.biz/de/advanced/package-cache-drivers#article\",\"headline\":\"Eigene Cache-Stores und Verträge in Paketen\",\"name\":\"Eigene Cache-Stores und Verträge in Paketen\",\"description\":\"Analysiert den CacheManager und den Store-Vertrag von Laravel 13 und prüft den Registrierungszeitpunkt von Treibern, die TTL-Umrechnung durch das Repository, das Vorhalten von Instanzen sowie den Unterstützungsumfang etwa bei Locks.\",\"url\":\"https://kawax.biz/de/advanced/package-cache-drivers\",\"mainEntityOfPage\":{\"@id\":\"https://kawax.biz/de/advanced/package-cache-drivers#webpage\"},\"dateModified\":\"2026-10-29T21:17:56.000Z\",\"publisher\":{\"@id\":\"https://kawax.biz/#organization\"},\"isPartOf\":{\"@id\":\"https://kawax.biz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Knowledge of Laravel\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Knowledge of Laravel","nav":{"global":null,"languages":[{"language":"jp","default":true,"pages":[{"title":"jp","href":"/jp/advanced/package-cache-drivers"}]},{"language":"en","pages":[{"title":"en","href":"/en/advanced/package-cache-drivers"}]},{"language":"de","tabs":[{"tab":"Meine Pakete","pages":[{"title":"Meine Pakete","href":"/de/packages/laravel-boost-copilot-cli"}]},{"tab":"Tutorial","pages":[{"title":"Tutorial","href":"/de/introduction"}]},{"tab":"Leitfaden","pages":[{"title":"Leitfaden","href":"/de/lifecycle"}]},{"tab":"Fortgeschrittene Themen","groups":[{"group":"KI-Entwicklung","pages":[{"title":"Einen MCP-Server mit Laravel bauen","href":"/de/advanced/mcp-server"},{"title":"Einen eigenen Agenten für Boost erstellen","href":"/de/advanced/boost-custom-agent"},{"title":"Einen eigenen Provider für das AI SDK erstellen","href":"/de/advanced/ai-sdk-custom-provider"},{"title":"Agenten-Middleware im Laravel AI SDK","href":"/de/advanced/ai-sdk-agent-middleware"}]},{"group":"Design Patterns","pages":[{"title":"Pipeline-Muster","href":"/de/advanced/pipeline"},{"title":"Fluent-Klasse","href":"/de/advanced/fluent"},{"title":"Macroable-Trait","href":"/de/advanced/macroable"},{"title":"Conditionable-Trait","href":"/de/advanced/conditionable"},{"title":"InteractsWithTime-Trait","href":"/de/advanced/interacts-with-time"},{"title":"ForwardsCalls-Trait","href":"/de/advanced/forwards-calls"},{"title":"tap()-Helper und Tappable-Trait","href":"/de/advanced/tap"},{"title":"Interne Implementierung des once()-Helpers — Once, Onceable und PreventsCircularRecursion","href":"/de/advanced/once-helper"},{"title":"Dumpable-Trait","href":"/de/advanced/dumpable"},{"title":"Support Contracts (Arrayable / Jsonable / Htmlable / Responsable)","href":"/de/advanced/support-contracts"},{"title":"Lottery-Klasse","href":"/de/advanced/lottery"},{"title":"Higher-Order Messages in Collections","href":"/de/advanced/higher-order-messages"},{"title":"Collection Deep Dive","href":"/de/advanced/collection-deep-dive"},{"title":"Illuminate\\Support\\Manager — Anatomie des Treibersystems","href":"/de/advanced/manager"},{"title":"PHP Reflection API","href":"/de/advanced/php-reflection"},{"title":"PHP FFI","href":"/de/advanced/ffi"},{"title":"PHP AST","href":"/de/advanced/php-ast"}]},{"group":"Paketentwicklung","pages":[{"title":"Laravel-Paketentwicklung","href":"/de/advanced/package-development"},{"title":"Interne Struktur der automatischen Paket-Erkennung","href":"/de/advanced/package-discovery"},{"title":"InteractsWithData-Trait","href":"/de/advanced/interacts-with-data"},{"title":"Deferred Service Provider","href":"/de/advanced/deferred-provider"},{"title":"Versionskompatibilität von Paketen verwalten","href":"/de/advanced/package-versioning"},{"title":"GitHub-Actions-Pinning und Sicherheit","href":"/de/advanced/github-actions-pinning"},{"title":"CHANGELOG und Release-Management für Pakete","href":"/de/advanced/package-changelog"},{"title":"Laravel-Pakete mit Orchestra Testbench testen","href":"/de/advanced/package-testing"},{"title":"Paketentwicklung mit Testbench Workbench","href":"/de/advanced/package-workbench"},{"title":"GeneratorCommand — Eigene make:-Befehle implementieren","href":"/de/advanced/generator-command"},{"title":"Ein Laravel-Starter-Kit erstellen","sidebarTitle":"Starter-Kit erstellen","href":"/de/advanced/starter-kit-creation"},{"title":"Statische Analyse für Pakete (PHPStan / Larastan)","href":"/de/advanced/package-static-analysis"},{"title":"Paketkonfiguration zusammenführen und cachen","href":"/de/advanced/package-config-merging"},{"title":"Paket-Migrationen veröffentlichen und aktualisieren","href":"/de/advanced/package-migrations"},{"title":"Paket-Views überschreiben und aktualisieren","href":"/de/advanced/package-views"},{"title":"Paket-Routen registrieren und cachen","href":"/de/advanced/package-routes"},{"title":"Paket-Caches in optimize integrieren","href":"/de/advanced/package-optimization"},{"title":"Öffentliche Paket-Assets veröffentlichen und aktualisieren","href":"/de/advanced/package-assets"},{"title":"Paketübersetzungen überschreiben und aktualisieren","href":"/de/advanced/package-translations"},{"title":"Hooks nach der Service-Auflösung in Paketen","href":"/de/advanced/package-service-resolution"},{"title":"Paket-Diagnoseinformationen zu about hinzufügen","href":"/de/advanced/package-about"},{"title":"Artisan-Befehle in Paketen registrieren und Abhängigkeiten auflösen","href":"/de/advanced/package-commands"},{"title":"Event-Listener in Paketen registrieren und cachen","href":"/de/advanced/package-events"},{"title":"Lebenszyklus-Design für Paket-Services","href":"/de/advanced/package-service-lifetimes"},{"title":"Middleware-Registrierung und Geltungsbereich in Paketen","href":"/de/advanced/package-middleware"},{"title":"Blade-Erweiterungen und Kompilierungscache in Paketen","href":"/de/advanced/package-blade-extensions"},{"title":"Storage-Treiber in Paketen registrieren und neu auflösen","href":"/de/advanced/package-filesystem-drivers"},{"title":"Eigene Benachrichtigungskanäle in Paketen und Prüfung der Zustellung","href":"/de/advanced/package-notification-channels"},{"title":"Container-Tags und Plugin-Aggregation in Paketen","href":"/de/advanced/package-container-tags"},{"title":"HTTP-Client und Tests in Paketen","href":"/de/advanced/package-http-client"},{"title":"Log-Channels in Paketen erweitern und neu auflösen","description":"Setzt custom/via und LogManager::extend() in Laravel 13 gezielt ein und testet die Logging-Funktion unter Berücksichtigung zwischengespeicherter Channels, forgetChannel() und Fallbacks.","href":"/de/advanced/package-logging"},{"title":"Eigene Cache-Stores und Verträge in Paketen","href":"/de/advanced/package-cache-drivers"}]},{"group":"Anwendungsstruktur","pages":[{"title":"Anwendungsstruktur ab Laravel 11","description":"Das komplette Bild der mit Laravel 11 eingeführten Slim Application Skeleton sowie die interne Implementierung von Application::configure() bis zum ApplicationBuilder.","href":"/de/advanced/app-structure"},{"title":"Migrationsleitfaden von der alten zur neuen Struktur","sidebarTitle":"Migrationsleitfaden","href":"/de/advanced/app-structure-migration"},{"title":"FAQ zur neuen App-Struktur ab Laravel 11","sidebarTitle":"FAQ neue App-Struktur","href":"/de/advanced/app-structure-faq"}]},{"group":"Neue Funktionen in Laravel 13","pages":[{"title":"PHP-Attribute","href":"/de/advanced/php-attributes"},{"title":"PHP-Attribute für Controller","sidebarTitle":"Controller-Attribute","href":"/de/advanced/controller-attributes"}]},{"group":"Eloquent im Detail","pages":[{"title":"Eloquent-Observer und Modell-Events","href":"/de/advanced/eloquent-observers"},{"title":"Eloquent-Scopes","href":"/de/advanced/eloquent-scopes"},{"title":"Eigene Casts in Eloquent","href":"/de/advanced/eloquent-casts"},{"title":"Eloquent Bootable Traits","href":"/de/advanced/eloquent-bootable-traits"},{"title":"Eigene Pivot-Modelle und chaperone","href":"/de/advanced/eloquent-custom-pivot"}]},{"group":"Validierungserweiterungen","pages":[{"title":"Eigene Validierungsregeln","href":"/de/advanced/custom-validation-rules"}]},{"group":"Erweiterung der Authentifizierung","pages":[{"title":"Eigene Auth-Guards implementieren","href":"/de/advanced/custom-auth-guard"},{"title":"Laravel Fortify und Starter-Kits","href":"/de/advanced/fortify"}]},{"group":"Sicherheit","pages":[{"title":"Rate Limiting anpassen","href":"/de/advanced/rate-limiting"}]},{"group":"Warteschlangen","pages":[{"title":"Ausführungssteuerung von Queue-Jobs","href":"/de/advanced/queue-job-control"}]},{"group":"Tests","pages":[{"title":"Fortgeschrittenes Testen mit Pest","href":"/de/advanced/testing-pest"}]},{"group":"Echtzeit","pages":[{"title":"Interna des Mercure-Broadcast-Treibers","href":"/de/advanced/mercure-broadcasting"}]}]},{"tab":"Blog","pages":[{"title":"Blog","href":"/de/blog/changelog/202609"}]}]},{"language":"es","pages":[{"title":"es","href":"/es/advanced/package-cache-drivers"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/advanced/package-cache-drivers"}]},{"language":"it","pages":[{"title":"it","href":"/it/advanced/package-cache-drivers"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/advanced/package-cache-drivers"}]},{"language":"nl","pages":[{"title":"nl","href":"/nl/advanced/package-cache-drivers"}]},{"language":"zh-Hans","pages":[{"title":"zh-Hans","href":"/zh-CN/advanced/package-cache-drivers"}]},{"language":"zh-Hant","pages":[{"title":"zh-Hant","href":"/zh-TW/advanced/package-cache-drivers"}]}]},"title":"Eigene Cache-Stores und Verträge in Paketen - Knowledge of Laravel","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["2bfc744e19"],"chunks":["NarrationPlayer-CALW4h7b.js","types-CiTgMxws.js","shallow-Bs2ZB0NO.js"]}