geheugen caching (vaak gewoon aangeduid als caching) is een techniek waarbij computertoepassingen tijdelijk gegevens opslaan in het hoofdgeheugen van een computer (dat wil zeggen, random access memory, of RAM) om snelle retrieval van die gegevens mogelijk te maken. Het RAM-geheugen dat wordt gebruikt voor de tijdelijke opslag staat bekend als de cache. Omdat toegang tot RAM aanzienlijk sneller is dan toegang tot andere media zoals harde schijven of netwerken, helpt caching applicaties sneller te draaien door snellere toegang tot gegevens. Caching is vooral efficiënt wanneer de applicatie een gemeenschappelijk patroon vertoont waarin het herhaaldelijk toegang krijgt tot gegevens die eerder zijn benaderd. Caching is ook handig om gegevensberekeningen op te slaan die anders tijdrovend zijn om te berekenen. Door de berekeningen in een cache op te slaan, bespaart het systeem tijd door herhaling van de berekening te vermijden.
Hoe werkt Geheugencaching?
Geheugencaching werkt door eerst een gedeelte van het RAM-geheugen opzij te zetten om als cache te worden gebruikt. Als een toepassing probeert om gegevens te lezen, meestal uit een gegevensopslagsysteem zoals een database, controleert het om te zien of de gewenste record al in de cache bestaat. Als dit het geval is, zal de toepassing de gegevens uit de cache lezen, waardoor de langzamere toegang tot de database wordt geëlimineerd. Als de gewenste record niet in de cache zit, leest de toepassing de record van de bron. Wanneer het haalt die gegevens, het schrijft ook de gegevens naar de cache, zodat wanneer de toepassing nodig heeft dat dezelfde gegevens in de toekomst, het kan snel krijgen uit de cache.
omdat de cache beperkt is in grootte, zullen sommige gegevens die al in de cache zitten uiteindelijk moeten worden verwijderd om ruimte te maken voor nieuwe gegevens die de toepassing het meest recent heeft benaderd. Dit betekent dat het caching systeem een strategie nodig heeft waarop records moeten worden verwijderd om ruimte te maken. De strategie zal afhangen van de aard van de toegang tot de gegevens van de applicatie, en zal over het algemeen proberen om records te verwijderen die naar verwachting niet snel opnieuw worden geopend. Een minst recent gebruikte (LRU) strategie zal bijvoorbeeld de record verwijderen waarvan de laatste toegang eerder was dan een ander record in de cache. De aanname hier is dat als het is een lange tijd geleden dat het record werd geopend, het zal waarschijnlijk niet snel weer worden geopend. Of om het anders te zeggen, de records die onlangs het meest werden gebruikt zullen waarschijnlijk binnenkort weer worden gebruikt. Een least-frequently-used (LFU) strategie houdt het bijhouden van het aantal toegangen van elk record in de cache en het verwijderen van het record met de minste hoeveelheid toegangen. Hierbij wordt ervan uitgegaan dat een record dat zelden wordt gebruikt waarschijnlijk niet snel opnieuw zal worden gebruikt.
de uitdaging met caches is hoe “cache misses” te minimaliseren, d.w.z., geprobeerd leest door de toepassing voor records die niet in de cache. Als je te veel missers hebt, neemt de efficiëntie van je cache af. Een toepassing die alleen nieuwe gegevens leest zou niet profiteren van een cache, en in feite, zou lagere prestaties vertonen als gevolg van het extra werk van het controleren van de cache nog niet het vinden van de gewenste record in het. Een manier waarop deze uitdaging kan worden beperkt is door gebruik te maken van Grotere caches. Dit is vaak niet praktisch op een enkele computer, dat is de reden waarom gedistribueerde caches zijn populaire keuzes voor het versnellen van toepassingen die toegang moeten krijgen tot grotere datasets. Een gedistribueerde cache bundelt het RAM-geheugen van meerdere computers die in een cluster zijn aangesloten, zodat u een grotere cache kunt maken die kan blijven groeien door meer computers aan het cluster toe te voegen. Technologieën zoals HAZELCAST IMDG kunnen worden gebruikt als een gedistribueerd cluster om grootschalige toepassingen te versnellen.
een andere uitdaging van caches is het risico van het lezen van “verouderde” gegevens, waarbij de gegevens in de cache niet de meest recente gegevens in de onderliggende bron weergeven. Vaak is dit risico een aanvaardbare afweging in het belang van de prestaties van de toepassing. In gevallen waarin dit niet het geval is, is het aan de toepassing die de onderliggende gegevensbron bijwerkt om de record in kwestie in de cache bij te werken.
voorbeeld Use Cases
een brede use case voor geheugencaching is het versnellen van databasetoepassingen, vooral die welke veel databasetoepassingen uitvoeren. Door het vervangen van een deel van de database leest met leest uit de cache, toepassingen kunnen latency die voortvloeit uit frequente database-toegangen te verwijderen. Deze use case is meestal te vinden in omgevingen waar een hoog volume van gegevens toegangen worden gezien, zoals in een veel verkeer website die dynamische inhoud uit een database beschikt.
een ander use case is query acceleration, waarbij de resultaten van een complexe query naar een database worden opgeslagen in de cache. Complexe queries uitvoeren van operaties zoals groepering en orde kan een aanzienlijke hoeveelheid tijd in beslag nemen om te voltooien. Als query ‘ s herhaaldelijk worden uitgevoerd, zoals het geval is in een business intelligence (BI) dashboard toegankelijk voor veel gebruikers, het opslaan van resultaten in een cache zou een grotere responsiviteit in die dashboards mogelijk te maken.
Gerelateerde Onderwerpen
JCache / Java-Cache
Cache Miss
Hibernate Cache Op Tweede Niveau
Verder Lezen
Caching Use Case
Database Caching
Hazelcast Cloud
Caching Made Bootiful: Spring Cache + Hazelcast