{"id":40042,"date":"2021-09-15T12:55:53","date_gmt":"2021-09-15T10:55:53","guid":{"rendered":"https:\/\/kinsta.com\/?p=98920"},"modified":"2023-06-30T15:12:43","modified_gmt":"2023-06-30T13:12:43","slug":"laravel-caching","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/","title":{"rendered":"Alles wat je moet weten over caching in Laravel"},"content":{"rendered":"<p>Caching is essentieel voor het kunnen bieden van hoge prestaties en goede schaalbaarheid. Het meteen implementeren van de beste strategie voor caching is belangrijk in het voorkomen van trage API&#8217;s en lange <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-caching-plugins\/\">laadtijden van pagina&#8217;s<\/a>. Laravel is \u00e9\u00e9n van de meest populaire PHP frameworks, dus het implementeren van de optimale strategie voor caching in Laravel is onmisbaar voor een goede gebruikerservaring en optimale bedrijfsvoering.<\/p>\n<p>In dit artikel kijken we naar verschillende strategie\u00ebn voor het implementeren en manipuleren van caching in Laravel. Je zult dus meer lezen over hoe caching met Laravel werkt, verschillende uitdagingen bij Laravel caching, en hoe je caching kan regelen voor Laravel toepassingen.<\/p>\n<p>Dit artikel zal het meest handig zijn als je al wat basiskennis hebt, waaronder het volgende:<\/p>\n<ul>\n<li>Redelijke kennis van algemene <a href=\"https:\/\/kinsta.com\/nl\/blog\/webdevelopment-tools\/\">webdevelopment<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/nl\/blog\/wat-is-laravel\/\">Basiskennis van Laravel<\/a><\/li>\n<li>Hoe je <a href=\"https:\/\/masteringbackend.com\/posts\/laravel-framework-the-ultimate-guide\">API&#8217;s kan bouwen met Laravel<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/nl\/docs\/wordpress-hosting\/caching\/sitecaching\/#site-cache-expiration\">Basiskennis over caching<\/a><\/li>\n<\/ul>\n<p>Laten we beginnen aan de lijst!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h3>Bekijk onze <a href=\"https:\/\/www.youtube.com\/watch?v=6eJMRMgn6mI\">videogids<\/a> over Laravel cache<\/h3>\n<p class=\"p1\"><kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=6eJMRMgn6mI\"><\/kinsta-video><\/p>\n<h2>Waarom is caching belangrijk?<\/h2>\n<p>Nu internetbedrijven zo hard aan het groeien zijn, kan je overal statistieken vinden over hoe belangrijk de laadtijden en prestaties van je website zijn voor je SEO, gebruikerservaring en conversies. En die lijden er allemaal onder als je geen caching gebruikt. En dat begint allemaal met een goede cachingstrategie.<\/p>\n<p>Een <a href=\"https:\/\/kinsta.com\/nl\/leren\/snelheidsoptimalisatie\/#slow-how-slow\">online onderzoek<\/a> toonde aan dat 1 seconde vertraging bij het laden, Amazon jaarlijks $1,6 miljard aan omzet zou kosten.<\/p>\n<p>Een <a href=\"https:\/\/www.thinkwithgoogle.com\/future-of-marketing\/digital-transformation\/the-google-gospel-of-speed-urs-hoelzle\/\">onderzoek van Google<\/a> liet zien dat als de zoekresultaten zelfs maar een fractie van een seconde trager zouden zijn, mensen minder zouden zoeken (voor de data-nerds, een <strong>vertraging van 400 ms<\/strong> zou een <strong>vermindering van 0,44 procent<\/strong> in zoekvolume betekenen). En dit ongeduld is niet beperkt tot zoekresultaten: vier van de vijf internetgebruikers browsen door wanneer een video hapert tijdens het laden.<\/p>\n<p>Het kleinste beetje traagheid in de laadtijden van je webpagina&#8217;s kan dus een flinke impact hebben op de gebruikerservaring van je bezoekers, en daarmee op de omzet van je bedrijf.<\/p>\n<h2>Wat is caching in Laravel?<\/h2>\n<p>Laravel biedt een robuust en eenvoudig te gebruiken implementatie van caching en verschillende backends voor caching. Met een Laravel caching kan je effici\u00ebnt en effectief wisselen tussen verschillende caching engines, zonder ook maar een regel code te hoeven schrijven.<\/p>\n<p>Je kan de configuratie van de Laravel cache vinden in de map <code><strong>config\/cache.php<\/strong><\/code>, alhoewel je meestal alleen het bestand <strong>.env<\/strong> nodig hebt om te wisselen van caching backend.<\/p>\n<p>Een Laravel cache biedt ook verschillende praktische methoden die we kunnen gebruiken voor het implementeren van verschillende cachingstrategie\u00ebn.<\/p>\n\n<h3>Laravel cache drivers met vergelijkingen<\/h3>\n<p>Laravel cache biedt geweldige caching backends en drivers. Afhankelijk van je use case, kun je schakelen tussen deze om je applicatieprestaties en -laadtijd te verbeteren.<\/p>\n<p>Daarnaast biedt een Laravel cache ook een naadloze manier om een custom backend te bouwen en die met je Laravel cache te gebruiken, maar dat is eigenlijk alleen nodig als onderstaande lijst geen kant-en-klare oplossing biedt voor je toepassing.<\/p>\n<p>Tijd voor de lijst van alle backends die de Laravel cache te bieden heeft.<\/p>\n<h4>1. File<\/h4>\n<p>De <strong>file<\/strong>\u00a0driver is de standaard backend die de Laravel cache zal gebruiken wanneer er geen driver gespecificeerd is in het\u00a0<strong>.env<\/strong>\u00a0bestand.<\/p>\n<p>De <strong>file<\/strong> backend is ontworpen om alle gecachete data op te slaan in een versleuteld bestand, te vinden onder <code><strong>storage\/framework\/<\/strong><\/code>. Laravel maakt een versleuteld bestand met alle data en de cache key, elke keer wanneer er nieuwe data gecachet wordt. Hetzelfde gebeurt wanneer de gebruiker de inhoud probeert op te halen. De Laravel cache doorzoekt de map voor de opgegeven key, en wanneer die gevonden wordt, dan stuurt het de inhoud terug.<\/p>\n<p>Aangezien de <strong>file<\/strong> backend perfect werkt, en je tijd en moeite bespaart voor het installeren en configureren van externe drivers, kan het ook <a href=\"https:\/\/kinsta.com\/developer-roles\/development-at-kinsta\/\">perfect voor development<\/a> zijn. Het is sneller dan de data direct van de database server halen.<\/p>\n<p>Om de <strong>file<\/strong> driver te gebruiken voeg je volgende code toe aan je <strong>.env<\/strong> bestand:<\/p>\n<pre><code class=\"language-markdown\">CACHE_DRIVER=file<\/code><\/pre>\n<h4>2. Array<\/h4>\n<p>De <strong>array<\/strong> driver is een perfecte caching backend voor het uitvoeren van geautomatiseerde tests, en kan eenvoudig geconfigureerd worden met Github Actions, Jenkins, en dergelijke.<\/p>\n<p>De <strong>array<\/strong> backend slaat de gecachete data op in een array in PHP en vereist dus geen installatie en configuratie van drivers. Dit werkt perfect voor geautomatiseerde tests, en het is ook iets sneller dan de file cache backend.<\/p>\n<p>Om de <strong>array<\/strong> driver te gebruiken voeg je volgende code toe aan je<strong> .env <\/strong>bestand:<\/p>\n<pre><code class=\"language-markdown\">CACHE_DRIVER=array<\/code><\/pre>\n<h4>3. Database<\/h4>\n<p>Wanneer je de <strong>database<\/strong> driver gebruikt, wordt data opgeslagen in het geheugen voor het huidige PHP proces. Daarom moet je een databasetabel aanmaken waar de gecachete data in opgeslagen kan worden. Daarnaast biedt de <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-database\/\">database<\/a> caching schaalbaarheid, doordat de belasting voor de query wordt verdeeld van de backend naar verschillende frontends.<\/p>\n<p>Je kan deze Artisan opdracht uitveren: <code>php artisan cache:table<\/code> om automatisch het database schema te maken dat de database driver nodig heeft.<\/p>\n<p>De <strong>database<\/strong> driver wordt vooral vaak toegepast in situaties waarin je elke willekeurige software op je hostingplatform kan installeren.<\/p>\n<p>Stel dat je een gratis hostingpakket hebt met een beperkt aantal opties. In dat geval raden we je aan om bij de <strong>file<\/strong> driver te blijven, aangezien de <strong>database<\/strong> driver anders meestal het zwakste punt in je toepassing is, en meer data proberen te duwen door een dergelijke bottleneck is in het algemeen een slecht idee.<\/p>\n<p>Om de <strong>database<\/strong> driver te gebruiken voeg je volgende code toe aan je <strong>.env<\/strong> bestand:<\/p>\n<pre><code class=\"language-markdown\">CACHE_DRIVER=database<\/code><\/pre>\n<h4>4. Redis<\/h4>\n<p>De <strong>redis<\/strong> driver gebruikt technologie voor caching binnen het geheugen, in dit geval de technologie <a href=\"https:\/\/kinsta.com\/nl\/docs\/wordpress-hosting\/caching\/redis-cache\/\">Redis<\/a><strong>.<\/strong> Alhoewel het sneller is dan bovenstaande opties, moet je daarvoor wel externe software installeren en configureren.<\/p>\n<p>Om de <strong>redis<\/strong> driver te gebruiken voeg je volgende code toe aan je <strong>.env<\/strong> bestand:<\/p>\n<pre><code class=\"language-markdown\">CACHE_DRIVER=redis<\/code><\/pre>\n<h4>5. Memcached<\/h4>\n<p>Memcached staat bekend als de populairste in-memory caching optie. Als je wat extra serveronderhoud (extra services installeren en bijhouden) geen probleem vindt, dan is Memcached een goede optie voor een memory-based cache.<\/p>\n<p>Om de <strong>memcached<\/strong> driver te kunnen gebruiken, moet de <a href=\"https:\/\/pecl.php.net\/package\/memcached\">Memcached PECL package<\/a> ge\u00efnstalleerd zijn.<\/p>\n<p>Om de <strong>memcached <\/strong>driver te gebruiken voeg je volgende code toe aan je<strong> .env<\/strong> bestand:<\/p>\n<pre><code class=\"language-markdown\">CACHE_DRIVER=memcached <\/code><\/pre>\n<p>De <a href=\"https:\/\/www.georgebuckingham.com\/laravel-cache-driver-performance\/\">beste caching driver om te gebruiken en de prestaties<\/a> van de caching driver hangen af van je toepassingen en de hoeveelheid data die opgehaald moet worden.<\/p>\n<h3>Gebruik en methoden van Laravel cache<\/h3>\n<p>Een Laravel cache biedt verschillende handige methoden waarmee je allerlei cachingstrategie\u00ebn kan implementeren.<\/p>\n<p>Hieronder een lijst met uitleg van de verschillende methoden (gecategoriseerd per use case):<\/p>\n<ol>\n<li><code>put()<\/code><\/li>\n<li><code>get()<\/code><\/li>\n<li><code>many()<\/code><\/li>\n<li><code>putMany()<\/code><\/li>\n<li><code>increment()<\/code><\/li>\n<li><code>decrement()<\/code><\/li>\n<li><code>forever()<\/code><\/li>\n<li><code>forget()<\/code><\/li>\n<li><code>flush()<\/code><\/li>\n<li><code>remember()<\/code><\/li>\n<li><code>rememberForever()<\/code><\/li>\n<\/ol>\n<h4>Opslaan in de cache<\/h4>\n<p>Het opslaan van nieuwe data in de caching is erg eenvoudig via de verschillende methoden, die allemaal een aantal optimale toepassingen hebben.<\/p>\n<h5>1. Cache::put()<\/h5>\n<p>Met deze methode kunnen drie parameters voor de key, de\u00a0<strong>duur<\/strong>, en de <strong>data<\/strong>\u00a0gecachet worden.<\/p>\n<p>Zo kan je <code><strong>Cache::put()<\/strong><\/code> gebruiken:<\/p>\n<pre><code class=\"language-php\">Cache::put(key, data, duration)\n\n$post = Post::find(1);\n\nCache::put('post_1', $post, 20);\n<\/code><\/pre>\n<p>De bovenstaande code zal het artikel inclusief unieke <strong>key<\/strong> 20 seconden lang opslaan.<\/p>\n<h5>2. Cache::putMany()<\/h5>\n<p>Deze methode slaat in \u00e9\u00e9n keer een array van data op in de cache, met dezelfde duur. Je kan hierbij twee parameters opgeven, namelijk <strong>data<\/strong> en <strong>seconds<\/strong>.<\/p>\n<p>Zo kan je\u00a0<code><strong>Cache::putMany()<\/strong><\/code> gebruiken:<\/p>\n<pre><code class=\"language-php\">Cache::putMany(data, duration) \/\/ syntax\n\n$posts = Post::all();\n\nCache::putMany($posts, 20);<\/code><\/pre>\n<h5>3. Cache::remember()<\/h5>\n<p>Ook deze methode is een handige manier om caching te implementeren. De <code><strong>Cache::remember()<\/strong><\/code>\u00a0methode accepteert drie parameters, een\u00a0<strong>key<\/strong>,\u00a0<strong>seconds<\/strong>, en <strong>closure<\/strong>, waarbij de laatste wordt gebruikt als data niet gevonden kan worden.<\/p>\n<p>We kijken even hoe je\u00a0<code><strong>Cache::remember()<\/strong><\/code> kan toepassen:<\/p>\n<pre><code class=\"language-php\">Cache::remember(key, duration, closure) \/\/ syntax\n\nCache::remember('posts', 20, function(){\n  return Post::all();\n});\n<\/code><\/pre>\n<p>Laravel caching biedt ook de <code><strong>Cache::rememberForever()<\/strong><\/code> methode, waarbij je geen <strong>seconds<\/strong> parameter kan opgeven, omdat de <strong>data<\/strong> voor altijd opgeslagen wordt.<\/p>\n<h5>4. Cache::forever()<\/h5>\n<p>Deze methode slaat de data voor altijd op in de cache server, zonder specifieke duur. Je kan het met de volgende code implementeren:<\/p>\n<pre><code class=\"language-php\">Cache::forever(key, data)\n\n$post = Post::find(1);\n\nCache::forever('post_1', $post);\n<\/code><\/pre>\n<h4>Ophalen van data uit de cache<\/h4>\n<p>De methoden in deze categorie kunnen data ophalen die je eerder opgeslagen hebt in de cache. De methoden reageren verschillend wanneer de data niet gevonden kan worden.<\/p>\n<h5>1. Cache::get()<\/h5>\n<p>De methode haalt data op van de cache server door middel van een specifieke key. Je kan een item vinden door onderstaande code te gebruiken:<\/p>\n<pre><code class=\"language-php\">Cache::get(key) \/\/ syntax\n\n$posts = Cache::get('posts');<\/code><\/pre>\n<h5>2. Cache::many()<\/h5>\n<p>Deze methode lijkt sterk op <code><strong>Cache::putMany()<\/strong><\/code>. Het wordt gebruikt om een array van gecachete data in \u00e9\u00e9n keer op te halen, via een array van gecachete keys. Je kan een array uit de cache ophalen met de volgende code:<\/p>\n<pre><code class=\"language-php\">Cache::many(keys) \/\/ syntax\n\nconst $keys = [\n  'posts',\n  'post_1',\n  'post_2'\n];\n\n$posts = Cache::many($keys);\n<\/code><\/pre>\n<h5>3. Cache::remember()<\/h5>\n<p>Je kan deze methode ook gebruiken voor het ophalen van gecachete data, door de cache server te controleren op basis van de opgegeven key. Als de data opgeslagen is in de cache, zal dit opgehaald worden. Als dat niet het geval is, zal de data opgehaald worden bij de Database Server en gecachet worden. De methode lijkt sterk op de\u00a0<code><strong>Cache::rememberForever()<\/strong><\/code>\u00a0methode, maar dan met een extra\u00a0<strong>seconds<\/strong>\u00a0parameter in de <code><strong>Cache::remember()<\/strong><\/code>\u00a0methode.<\/p>\n<h4>Verwijderen van items uit de cache<\/h4>\n<p>De methoden in deze categorie worden toegepast om items uit de cache te verwijderen. We groeperen ze op functie:<\/p>\n<h5>1. Cache::forget()<\/h5>\n<p>De methode verwijdert \u00e9\u00e9n item uit de cache, op basis van de key:<\/p>\n<pre><code class=\"language-php\">Cache::forget('key');<\/code><\/pre>\n<h5>2. Cache::flush()<\/h5>\n<p>Deze methode leegt alle cache engines. Hiermee worden alle items overal in de cache verwijderd:<\/p>\n<pre><code class=\"language-php\">Cache::flush();<\/code><\/pre>\n<h4>Verhogen of verlagen van waarden in de cache<\/h4>\n<p>Je kan de waarden van een integer die opgeslagen is in de cache verhogen of verlagen, via de volgende methoden:<\/p>\n<pre><code class=\"language-php\">Cache::increment('key');\n\nCache::increment('key', $amount);\n\nCache::decrement('key');\n\nCache::decrement('key', $amount);\n<\/code><\/pre>\n<p>Laravel caching biedt nog allerlei andere handige methoden die we nog niet hebben laten zien, maar dit zijn alvast de belangrijkste. Je kan een overzicht van alle methoden in de offici\u00eble <a href=\"https:\/\/laravel.com\/docs\/8.x\/cache#cache-usage\">Laravel cache documentatie<\/a> vinden.<\/p>\n<h3>Opdrachten voor de caching uitgelegd<\/h3>\n<p>Laravel biedt opdrachten waarmee je eenvoudiger en sneller kan werken met een Laravel cache. Hieronder de lijst met beschikbare <a href=\"https:\/\/kinsta.com\/nl\/blog\/ssh-commandos\/\">opdrachten<\/a> en bijbehorende functies.<\/p>\n<h4>Legen van de Laravel cache<\/h4>\n<p>Deze opdracht wordt gebruikt om de Laravel cache te legen, nog voordat het verloopt, via de terminal of console. Je kan hiervoor onder meer de volgende opdracht gebruiken:<\/p>\n<pre><code class=\"language-bash\">php artisan cache:clear<\/code><\/pre>\n<h4>Legen van de route-cache<\/h4>\n<p>Deze opdracht kan je gebruiken om de route-cache van je Laravel toepassing te legen. Voor het legen van je route-cache kan je de volgende opdracht gebruiken:<\/p>\n<pre><code class=\"language-bash\">php artisan config:cache<\/code><\/pre>\n<h4>Legen van gecompileerde view-bestanden<\/h4>\n<p>Deze opdracht kan je gebruiken om de gecompileerde view-bestanden van je Laravel toepassing te legen. Je kan het met de volgende code implementeren:<\/p>\n<pre><code class=\"language-php\">php artisan view:clear<\/code><\/pre>\n<h4>Database tabel<\/h4>\n<p>Wanneer je de database driver gebruikt, moet je een database schema maken om de gecachete data op te slaan, met de naam <strong>cache<\/strong>. Je kan ook de Artisan opdracht gebruiken om het juiste schema aan te maken:<\/p>\n<pre><code class=\"language-bash\">php artisan cache:table<\/code><\/pre>\n<h2>Strategie\u00ebn voor caching in Laravel<\/h2>\n<p>Afhankelijk van de use case van je toepassing en precieze datastructuur, kan je meestal kiezen uit verschillende strategie\u00ebn voor caching. Je kan zelfs een geheel eigen strategie maken die perfect bij jouw wensen past. Hieronder een aantal populaire caching-strategie\u00ebn die je in je Laravel project kan gebruiken.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Kinsta maakt het mogelijk om Laravel op je producten te gebruiken, ook al wordt het niet officieel ondersteund door ons eigen team.<\/p>\n<\/aside>\n\n<h3>writeThrough<\/h3>\n<p>In de <strong>writeThrough<\/strong>\u00a0strategie bevindt de cache server zich tussen de verzoeken en de database server, waardoor elke <strong>write<\/strong> bewerking via de cache server loopt voordat het naar de database server gaat. De <strong>writeThrough<\/strong> cachingstrategie lijkt sterk op de <strong>readThrough<\/strong> strategie.<\/p>\n<p>Je kan deze strategie implementeren voor je Laravel cache met de volgende code:<\/p>\n<pre><code class=\"language-php\">public function writeThrough($key, $data, $minutes) {\n    $cacheData = Cache::put($key, $data, $minutes)\n\n    \/\/ Database Server is called from(after) the Cache Server.\n    $this-&gt;storeToDB($cachedData)\n    return $cacheData\n}\n\nprivate function storeToDB($data){\n    Database::create($data)\n    return true\n}<\/code><\/pre>\n<h3>writeBack (writeBehind)<\/h3>\n<p>Deze strategie is een meer gevorderde variant van de <strong>writeThrough<\/strong> strategie, doordat er een vertraging voor schrijfbewerkingen wordt toegevoegd.<\/p>\n<p>Je kan dit ook de <strong>writeBehind<\/strong> strategie noemen, aangezien de vertraging wordt toegepast op de cache server, voordat de data naar de database server wordt verzonden.<\/p>\n<p>Je kan deze strategie implementeren voor je Laravel cache met de volgende code:<\/p>\n<pre><code class=\"language-php\">$durationToFlush = 1; \/\/ (in minute)\n $tempDataToFlush = [];\n\n  public function writeBack($key, $data, $minutes){\n    return $this-&gt;writeThrough($key, $data, $minutes);\n  }\n\n  public function writeThrough($key, $data, $minutes) {\n      $cacheData = Cache::put($key, $data, $minutes);\n      $this-&gt;storeForUpdates($cacheData);\n      return $cacheData;\n  }\n\n\/\/ Stores new data to temp Array for updating\n  private function storeForUpdates($data){\n    $tempData = {};\n    $tempData['duration'] = this.getMinutesInMilli();\n    $tempData['data'] = data;\n    array_push($tempDataToFlush, data);\n  }\n\n\/\/ Converts minutes to millisecond\nprivate function getMinutesInMilli(){\n  $currentDate = now();\n  $futureDate = Carbon(Carbon::now()-&gt;timestamp + $this-&gt;durationToFlush * 60000)\n  return $futureDate-&gt;timestamp\n}\n\n\/\/ Calls to update the Database Server.\npublic function updateDatabaseServer(){\n  if($this-&gt;tempDataToFlush){\n    foreach($this-&gt;tempDataToFlush as $index =&gt; $obj){\n      if($obj-&gt;duration timestamp){\n        if(Database::create($obj-&gt;data)){\n            array_splice($this-&gt;tempDataToFlush, $index, 1);\n        }\n      }\n    }\n  }\n}<\/code><\/pre>\n<p>De <strong>writeBack<\/strong> methode callt de <strong>writeThrough<\/strong> methode, die de data opslaat op de cache server en in een tijdelijke array die later naar de database server gestuurd wordt, door middel van de <strong>updateDatabaseServer<\/strong> methode. Je kan een <a href=\"https:\/\/masteringbackend.com\/posts\/laravel-cron-the-definitive-guide\">CronJob<\/a> instellen om de database server elke vijf minuten te laten updaten.<\/p>\n<h3>writeAround<\/h3>\n<p>Met deze strategie kunnen <strong>write<\/strong> bewerkingen direct naar de database server gaan, zonder de cache server te updaten. Alleen tijdens de <strong>read<\/strong> bewerkingen wordt de cache server ge\u00fcpdatet.<\/p>\n<p>Stel dat een gebruiker een nieuw <strong>Article<\/strong> wil aanmaken, dan wordt het <strong>Article<\/strong> meteen op de database server opgeslagen. Wanneer een gebruiker het <strong>Article<\/strong> voor het eerst wil lezen, wordt het <strong>Article<\/strong> opgehaald van de database server en wordt de cache server bijgewerkt voor toekomstige verzoeken.<\/p>\n<p>Je kan deze strategie implementeren voor je Laravel cache met de volgende code:<\/p>\n<pre><code class=\"language-php\">public function writeAround($data) {\n    $storedData = Database::create($data);\n    return $storedData;\n}\n\npublic function readOperation($key, $minutes){\n    $cacheData = Cache::remember($key, $minutes, function() {\n      return Article::all();\n    })\n    return $cacheData;\n}\n<\/code><\/pre>\n<h3>Cache ernaast (Lazy Loading)<\/h3>\n<p>De database ligt bij deze strategie als het ware naast de verbinding, en de toepassing haalt de data eerste op bij de cache server. Als de data gevonden wordt, verzendt deze de data meteen naar de client. Zo niet, dus bij een miss, dan stuurt de databaseserver de data naar de cache server voor toekomstige verzoeken.<\/p>\n<p>Je kan deze strategie implementeren voor je Laravel cache met de volgende code:<\/p>\n<pre><code class=\"language-php\">public function lazyLoadingStrategy($key, $minutes, $callback) {\n  if (Cache::has($key)) {\n      $data = Cache::get($key);\n      return $data;\n  } else {\n      \/\/ Database Server is called outside the Cache Server.\n      $data = $callback();\n      Cache::set($key, $data, $minutes);\n      return $data;\n  }\n}<\/code><\/pre>\n<p>Bovenstaande code toont de implementatie van een naastliggende cache, die equivalent is aan de methode <strong>Cache::remember<\/strong>.<\/p>\n<h3>Read Through<\/h3>\n<p>Deze strategie is technisch tegenovergesteld van de naastliggende cache methode. In dit geval bevindt de cache server zich tussen het verzoek van de client en de database server.<\/p>\n<p>Verzoeken gaan direct naar de cache server, en deze moet de data vinden op de <a href=\"https:\/\/kinsta.com\/nl\/blog\/installeer-php\/\">databaseserver<\/a>, als het niet in de cache server zelf gevonden kan worden.<\/p>\n<p>Je kan deze strategie implementeren voor je Laravel cache met de volgende code:<\/p>\n<pre><code class=\"language-php\">public function readThrough($key, $minutes) {\n      $data = Cache::find($key, $minutes);\n      return $data;\n}\n\nprivate function find($key, $minutes){\n    if(Cache::has($key);){\n      return Cache::get($key);\n    }\n\n    \/\/ Database Server is called from the Cache Server.\n    $DBdata = Database::find($key);\n    Cache:put($key, $DBdata, $minutes);\n    return $DBdata;\n}<\/code><\/pre>\n<p>En dat is het al weer! We hebben nu een aantal populaire strategie\u00ebn voor caching besproken die je meteen kan implementeren in je volgende Laravel toepassing. Onthoud daarbij dat je ook een geheel eigen strategie kan bedenken, als dat beter bij je project past.<\/p>\n<h2>De User Interface van een Laravel app cachen<\/h2>\n<p>Het cachen van de UI van een Laravel app staat bekend als Full Page Caching (FPC). Deze term slaat op het proces waarbij de HTML respons van een applicatie in de cache opgeslagen wordt.<\/p>\n<p>Dit is ideaal voor toepassingen waarin de dynamische HTML data niet constant verandert. Je kan de HTML respons dan caching voor een snellere weergave en verwerking van de HTML.<\/p>\n<p>We kunnen FPC implementeren met de volgende code:<\/p>\n<pre><code class=\"language-php\">class ArticlesController extends Controller {\n    public function index() {\n        if ( Cache::has('articles_index') ) {\n            return Cache::get('articles_index');\n        } else {\n            $news = News::all();\n            $cachedData = view('articles.index')-&gt;with('articles', $news)-&gt;render();\n            Cache::put('articles_index', $cachedData);                                         \n            return $cachedData;           \n        }  \n    }\n}<\/code><\/pre>\n<p>Wellicht valt je al meteen op dat we controleren of de <strong>articles_index<\/strong> pagina al bestaat op de cache server. Vervolgens sturen we de complete pagina terug door deze te tonen met de Laravel methoden <strong>view()<\/strong> en <strong>render()<\/strong>.<\/p>\n<p>Is de pagina niet aanwezig, dan verwerken we de pagina en slaan we de output op in de cache server voor volgende verzoeken, voordat we de verwerkte pagina doorgeven aan de browser.<\/p>\n<h2>Een Laravel app bouwen<\/h2>\n<p>Tijd om in de praktijk te brengen wat we tot nu toe hebben geleerd, door een nieuw Laravel project te maken, met een Laravel cache.<\/p>\n<p>Als je nog nooit Laravel hebt gebruikt, kan je lezen <a href=\"https:\/\/kinsta.com\/nl\/blog\/wat-is-laravel\/\">wat Laravel<\/a> is, en eens naar onze lijst met de <a href=\"https:\/\/kinsta.com\/nl\/blog\/laravel-tutorial\/\">beste Laravel tutorials<\/a> kijken om er mee te beginnen.<\/p>\n<h3>Laravel klaarzetten<\/h3>\n<p>Allereerst maken we een nieuwe Laravel instance door middel van onderstaande opdracht. Je kan eventueel de offici\u00eble documentatie gebruiken voor meer informatie.<\/p>\n<p>Open je console en ga naar de map waar je je PHP projecten bewaart, voordat je onderstaande opdrachten uitvoert. Zorg ervoor dat <a href=\"https:\/\/getcomposer.org\/\">Composer<\/a> goed ge\u00efnstalleerd en geconfigureerd is.<\/p>\n<pre><code class=\"language-bash\">composer create-project laravel\/laravel fast-blog-app\n\n\/\/ Change directory to current Laravel installation\ncd fast-blog-app\n\n\/\/ Start Laravel development server.\nphp artisan serve\n<\/code><\/pre>\n<h3>Configureren en vullen van de database<\/h3>\n<p>Nu moeten we de database opzeten, een nieuw <strong>Article<\/strong> model maken, en 500 datapunten simuleren om de database te kunnen testen.<\/p>\n<p>Open je <a href=\"https:\/\/kinsta.com\/nl\/blog\/adminer\/\">database client<\/a> en maak een nieuwe database aan. Wij doen dit met de naam <strong>fast_blog_app_db<\/strong> en vullen vervolgens de gegevens van de database in bij het <strong>.env<\/strong> bestand:<\/p>\n<pre><code class=\"language-bash\">DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=fast_blog_app_db\nDB_USERNAME=\/\/DB USERNAME HERE\nDB_PASSWORD=\/\/DB PASSWORD HERE\n<\/code><\/pre>\n<p>Daarna voeren we onderstaande opdracht uit om de migratie te voltooien en meteen het <strong>Article<\/strong> model te maken:<\/p>\n<pre><code class=\"language-bash\">php artisan make:model Article -m<\/code><\/pre>\n<p>Open de nieuw aangemaakte migratie die je kan vinden onder <code>database\/migrations\/xxx-create-articles-xxx.php<\/code> en plak de volgende code:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\nclass CreateArticlesTable extends Migration\n{\n    \/**\n     * Run the migrations.\n     *\n     * @return void\n     *\/\n    public function up()\n    {\n        Schema::create('articles', function (Blueprint $table) {\n            $table-&gt;id();\n            $table-&gt;string('title');\n            $table-&gt;text('description');\n            $table-&gt;timestamps();\n        });\n    }\n    \/**\n     * Reverse the migrations.\n     *\n     * @return void\n     *\/\n    public function down()\n    {\n        Schema::dropIfExists('articles');\n    }\n}<\/code><\/pre>\n<p>En vervolgens kan je onderstaande opdracht uitvoeren om een nieuwe seeder te maken voor testdata:<\/p>\n<pre><code class=\"language-bash\">php artisan make:seeder ArticleSeeder<\/code><\/pre>\n<p>Open het nieuwe bestand onder\u00a0<code>database\/seeders\/ArticleSeeder.php<\/code>\u00a0en plak onderstaande code daarin:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace Database\\Seeders;\nuse App\\Models\\Article;\nuse Illuminate\\Database\\Seeder;\nclass ArticleSeeder extends Seeder\n{\n    \/**\n     * Run the database seeds.\n     *\n     * @return void\n     *\/\n    public function run()\n    {\n        Article::factory()-&gt;count(500)-&gt;create();\n    }\n}<\/code><\/pre>\n<p>Open het bestand <strong>DatabaseSeeder.php<\/strong> in dezelfde map en voeg daar deze code aan toe:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace Database\\Seeders;\nuse Illuminate\\Database\\Seeder;\nclass DatabaseSeeder extends Seeder\n{\n    \/**\n     * Seed the application's database.\n     *\n     * @return void\n     *\/\n    public function run()\n    {\n        $this-&gt;call(ArticleSeeder::class);\n    }\n}<\/code><\/pre>\n<p>En dan voer je deze opdracht uit om een nieuwe &#8220;factory&#8221; aan te maken:<\/p>\n<pre><code class=\"language-bash\">php artisan make:factory ArticleFactory<\/code><\/pre>\n<p>Open dit nieuwe bestand vanuit\u00a0<code>database\/factories\/ArticleFactory.php<\/code> en plak weer de volgende code:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace Database\\Factories;\nuse App\\Models\\Article;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nclass ArticleFactory extends Factory\n{\n    \/**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     *\/\n    protected $model = Article::class;\n    \/**\n     * Define the model's default state.\n     *\n     * @return array\n     *\/\n    public function definition()\n    {\n        return [\n            'title' =&gt; $this-&gt;faker-&gt;text(),\n            'description' =&gt; $this-&gt;faker-&gt;paragraph(20)\n        ];\n    }\n}<\/code><\/pre>\n<p>Nu kan je onderstaande opdracht uitvoeren om het nieuwe schema te migreren en meteen testdata aan te maken:<\/p>\n<pre><code class=\"language-bash\">php artisan migrate --seed<\/code><\/pre>\n<h3>Maken van de Article controller<\/h3>\n<p>Nu zullen we een controller maken en de routes instellen voor het afhandelen van verzoeken en ophalen van data op basis van bovenstaande model.<\/p>\n<p>Voer de volgende opdracht uit om een nieuwe\u00a0<strong>ArticlesController<\/strong>\u00a0te maken in de map <code>app\/Http\/Controllers<\/code>\u00a0:<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller ArticlesController --resource<\/code><\/pre>\n<p>Open het bestand en voeg de volgende code toe aan de class:<\/p>\n<pre><code class=\"language-php\">\/\/ Returns all 500 articles with Caching\npublic function index() {\n  return Cache::remember('articles', 60, function () {\n      return Article::all();\n  });\n}\n\n\/\/ Returns all 500 without Caching \npublic function allWithoutCache() {\n  return Article::all();\n}<\/code><\/pre>\n<p>Daarna kan je het bestand <strong>api.php<\/strong> openen dat je in de map <code>routes\/<\/code> kan vinden, om onderstaande code te plakken, zodat we een eindpunt hebben waar we onze data vandaan kunnen halen:<\/p>\n<pre><code class=\"language-php\">Route::get('\/articles', 'ArticlesController@index');\n\nRoute::get('\/articles\/withoutcache', 'ArticlesController@allWithoutcache');<\/code><\/pre>\n<h3>Testen van de prestaties<\/h3>\n<p>Als laatste <a href=\"https:\/\/kinsta.com\/nl\/blog\/application-performance-monitoring\/\">testen we de prestaties<\/a> van de respons van onze app met en zonder de Laravel cache.<\/p>\n<p>Dit screenshot laat de responstijden van de API zien m\u00e9t een ge\u00efmplementeerde cache:<\/p>\n<figure id=\"attachment_99464\" aria-describedby=\"caption-attachment-99464\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/laravel-api-response-time-cache.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-99464 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/laravel-api-response-time-cache-1024x583.png\" alt=\"Laravel API responstijden met cache.\" width=\"1024\" height=\"583\"><\/a><figcaption id=\"caption-attachment-99464\" class=\"wp-caption-text\">Laravel API responstijden met cache.<\/figcaption><\/figure>\n<p>En dit screenshot laat de responstijden van een API zonder cache zien, waarbij je kan zien dat deze tijden ten op zichte van de gecachete versies wel <strong>5000%<\/strong> hoger liggen:<\/p>\n<figure id=\"attachment_99465\" aria-describedby=\"caption-attachment-99465\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/laravel-api-response-time-no-cache.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-99465 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/laravel-api-response-time-no-cache-1024x584.png\" alt=\"Laravel API responstijden zonder cache.\" width=\"1024\" height=\"584\"><\/a><figcaption id=\"caption-attachment-99465\" class=\"wp-caption-text\">Laravel API responstijden zonder cache.<\/figcaption><\/figure>\n\n<h2>Samenvatting<\/h2>\n<p>In dit artikel hebben we gekeken naar verschillende strategie\u00ebn voor het implementeren en bewerken van Laravel caching door een nieuw project te bouwen, de responstijden te benchmarken, en de resultaten te vergelijken.<\/p>\n<p>Je hebt ook gelezen hoe je verschillende caching drivers en methoden in Laravel kan gebruiken. Daarnaast hebben we verschillende strategie\u00ebn voor caching besproken zodat je kan bepalen wat het best bij jou past.<\/p>\n<p>Voor meer Laravel, lees eens onze selectie van de <a href=\"https:\/\/kinsta.com\/nl\/blog\/laravel-tutorial\/\">beste Laravel tutorials<\/a>. Of je nou een beginner bent, of al een gevorderde Laravel developer, er zit voor iedereen wat bij.<\/p>\n<p><em>Als je nog vragen hebt over Laravel caching, laat het ons dan vooral weten in de reacties.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Caching is essentieel voor het kunnen bieden van hoge prestaties en goede schaalbaarheid. Het meteen implementeren van de beste strategie voor caching is belangrijk in het &#8230;<\/p>\n","protected":false},"author":193,"featured_media":40045,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[368,32],"topic":[866,864,886],"class_list":["post-40042","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-laravel","tag-php","topic-laravel","topic-php-frameworks","topic-website-cache"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Alles wat je moet weten over caching in Laravel<\/title>\n<meta name=\"description\" content=\"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alles wat je moet weten over caching in Laravel\" \/>\n<meta property=\"og:description\" content=\"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-15T10:55:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-30T13:12:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Solomon Eseme\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"Alles wat je moet weten over caching in Laravel\",\"datePublished\":\"2021-09-15T10:55:53+00:00\",\"dateModified\":\"2023-06-30T13:12:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\"},\"wordCount\":3051,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg\",\"keywords\":[\"laravel\",\"php\"],\"articleSection\":[\"Webdevelopment\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\",\"name\":\"Alles wat je moet weten over caching in Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg\",\"datePublished\":\"2021-09-15T10:55:53+00:00\",\"dateModified\":\"2023-06-30T13:12:43+00:00\",\"description\":\"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Alles wat je moet weten over caching in Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Alles wat je moet weten over caching in Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g\",\"caption\":\"Solomon Eseme\"},\"description\":\"I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me\",\"sameAs\":[\"https:\/\/masteringbackend.com\",\"https:\/\/linkedin.com\/in\/solomoneseme\",\"https:\/\/x.com\/kaperskyguru\"],\"url\":\"https:\/\/kinsta.com\/nl\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Alles wat je moet weten over caching in Laravel","description":"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/","og_locale":"nl_NL","og_type":"article","og_title":"Alles wat je moet weten over caching in Laravel","og_description":"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.","og_url":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2021-09-15T10:55:53+00:00","article_modified_time":"2023-06-30T13:12:43+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg","type":"image\/jpeg"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg","twitter_creator":"@kaperskyguru","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Solomon Eseme","Geschatte leestijd":"17 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"Alles wat je moet weten over caching in Laravel","datePublished":"2021-09-15T10:55:53+00:00","dateModified":"2023-06-30T13:12:43+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/"},"wordCount":3051,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg","keywords":["laravel","php"],"articleSection":["Webdevelopment"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/","url":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/","name":"Alles wat je moet weten over caching in Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg","datePublished":"2021-09-15T10:55:53+00:00","dateModified":"2023-06-30T13:12:43+00:00","description":"Leer hoe je software performance en schaalbaarheid vergroot door het implementeren en manipuleren van de juiste cachingstrategie in Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/laravel-caching.jpeg","width":1460,"height":730,"caption":"Alles wat je moet weten over caching in Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/laravel-caching\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/laravel\/"},{"@type":"ListItem","position":3,"name":"Alles wat je moet weten over caching in Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g","caption":"Solomon Eseme"},"description":"I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me","sameAs":["https:\/\/masteringbackend.com","https:\/\/linkedin.com\/in\/solomoneseme","https:\/\/x.com\/kaperskyguru"],"url":"https:\/\/kinsta.com\/nl\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/40042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=40042"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/40042\/revisions"}],"predecessor-version":[{"id":51102,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/40042\/revisions\/51102"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/it"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/translations\/se"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/40042\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/40045"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=40042"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=40042"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=40042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}