Minnescaching (ofta helt enkelt kallad caching) är en teknik där datorapplikationer tillfälligt lagrar data i en dators huvudminne (dvs. slumpmässigt åtkomstminne eller RAM) för att möjliggöra snabb hämtning av dessa data. RAM-minnet som används för tillfällig lagring kallas cache. Eftersom åtkomst till RAM är betydligt snabbare än åtkomst till andra medier som hårddiskar eller nätverk, hjälper caching applikationer att springa snabbare på grund av snabbare åtkomst till data. Cachning är särskilt effektiv när applikationen uppvisar ett gemensamt mönster där det upprepade gånger får åtkomst till data som tidigare nås. Caching är också användbart för att lagra databeräkningar som annars är tidskrävande att beräkna. Genom att lagra beräkningarna i en cache sparar systemet tid genom att undvika upprepning av beräkningen.
Hur fungerar Minnescachning?
Minnescachning fungerar genom att först lägga undan en del RAM som ska användas som cache. När ETT program försöker läsa data, vanligtvis från ett datalagringssystem som en databas, kontrollerar den om den önskade posten redan finns i cachen. Om det gör det kommer programmet att läsa data från cachen, vilket eliminerar den långsammare åtkomsten till databasen. Om den önskade posten inte finns i cachen läser programmet posten från källan. När den hämtar dessa data skriver den också data till cachen så att när applikationen behöver samma data i framtiden kan den snabbt hämta den från cachen.
eftersom cachen är begränsad i storlek måste så småningom vissa data som redan finns i cachen tas bort för att ge plats för nya data som applikationen senast har åtkomst till. Det betyder att cachningssystemet behöver en strategi för vilka poster som ska tas bort för att göra plats. Strategin kommer att bero på vilken typ av programmets dataåtkomst, och kommer i allmänhet att försöka ta bort poster som inte förväntas nås igen snart. Till exempel kommer en minst nyligen använd (LRU) strategi att ta bort posten vars senaste åtkomst var före någon annan post i cachen. Antagandet här är att om det har gått länge sedan posten öppnades, kommer den sannolikt inte att nås igen snart. Eller för att uttrycka det på ett annat sätt, de poster som användes mest nyligen kommer sannolikt att användas igen snart. En minst ofta använd (LFU) strategi innebär att spåra antalet åtkomst för varje post i cachen och ta bort posten med minst åtkomst. Antagandet här är att en sällan använd post sannolikt inte kommer att användas igen snart.
utmaningen med cachar är hur man minimerar ”cache-missar”, dvs., försökte läsa av applikationen för poster som inte finns i cachen. Om du har för många missar minskar effektiviteten i din cache. Ett program som bara läser nya data skulle inte dra nytta av en cache, och i själva verket skulle uppvisa lägre prestanda på grund av det extra arbetet med att kontrollera cachen ännu inte hitta den önskade posten i den. Ett sätt denna utmaning kan mildras är genom att utnyttja större cachar. Detta är ofta inte praktiskt på en enda dator, varför distribuerade cachar är populära val för att påskynda applikationer som behöver komma åt större datamängder. En distribuerad cache pooler tillsammans RAM för flera datorer som är anslutna i ett kluster så att du kan skapa en större cache som kan fortsätta att växa genom att lägga till fler datorer till klustret. Tekniker som Hazelcast IMDG kan användas som ett distribuerat kluster för att påskynda storskaliga applikationer.
en annan utmaning med cachar är risken att läsa ”inaktuella” data, där data i cachen inte återspeglar de senaste uppgifterna i den underliggande källan. Ofta är denna risk en acceptabel avvägning för applikationens prestanda. I de fall det inte är, är det upp till applikationen som uppdaterar den underliggande datakällan för att uppdatera posten i fråga i cachen.
exempel användningsfall
ett brett användningsfall för minnescachning är att påskynda databasapplikationer, särskilt de som utför många databasläsningar. Genom att ersätta en del av databasläsningar med läsningar från cachen kan applikationer ta bort latens som uppstår genom frekventa databasåtkomst. Detta användningsfall finns vanligtvis i miljöer där en stor mängd dataåtkomst ses, som på en webbplats med hög trafik som har dynamiskt innehåll från en databas.
ett annat användningsfall innebär frågaacceleration, där resultaten av en komplex fråga till en databas lagras i cachen. Komplexa frågor som kör operationer som gruppering och ordning kan ta betydande tid att slutföra. Om frågor körs upprepade gånger, vilket är fallet i en business intelligence (BI) instrumentpanel nås av många användare, lagra resultat i en cache skulle möjliggöra större lyhördhet i dessa instrumentpaneler.
Relaterade Ämnen
JCache / Java Cache
Cache Miss
Hibernate Andra Nivå Cache
Vidare Läsning
Cachning Användningsfall
Databas Cachning
Hazelcast Cloud
Caching Gjort Bootiful: Spring Cache + Hazelcast