Caching är ett begrepp inom datavetenskap som beskriver att man sparar kopior av ofta använda data för att snabba upp åtkomst eller undvika dyra beräkningar. En cache (uttalas "cash" /ˈkæʃ/ KASH) fungerar genom att hålla en liten, snabbt åtkomlig uppsättning kopior av data från ett större, långsammare lagringsmedium. När data efterfrågas kontrolleras först cachen: om kopian finns där (en cache‑hit) kan den användas omedelbart; om inte (en cache‑miss) måste originaldata hämtas eller beräknas, vilket tar längre tid. Att cacha minskar i genomsnitt svarstiden och belastningen på långsammare resurser.
Varför caching fungerar
Två viktiga principer gör caching effektivt:
- Referenslokalitet — program tenderar att få åtkomst till data som ligger nära varandra i tid eller i adressrymd. Detta kallas också referenslokalitet och delas ofta upp i temporär lokalitet (samma data används flera gånger under kort tid) och rumslig lokalitet (data nära varandra används tillsammans).
- Skillnad i åtkomsttid — det är vanligt att ett stort lagringsmedium (t.ex. hårddisk, nätverk eller komplicerade beräkningar) är betydligt långsammare än en mindre, snabbare mellanlagring. Genom att hålla de mest använda objekten i den snabba cachen sparas tid.
Olika typer av cacheminne
Det finns många former av cache beroende på var i systemet den används:
- CPU‑cache — flera nivåer (L1, L2, L3) nära processorkärnan för att snabba upp instruktioner och dataåtkomst.
- Disk‑ eller filcache — operativsystemets minne som håller nyligen lästa eller skrivna filblock för att minska I/O‑åtkomst till hårddisk eller SSD.
- Webbläsarcache — sparar webbresurser (HTML, bilder, script) lokalt för snabbare laddning av tidigare besökta sidor.
- CDN‑cache (Content Delivery Network) — distribuerade servrar som cacher webbinnehåll nära användarna.
- Applikationscache — inbyggda eller externa cachelager (t.ex. Redis, Memcached) för att lagra resultat av dyra databasanrop eller beräkningar.
Cacheorganisation och prestandafaktorer
För prestanda och kostnad finns flera dimensioner att överväga:
- Storlek — större cache rymmer fler objekt men är ofta dyrare och kan ge något längre åtkomsttid.
- Associativitet — hur cacheposter placeras (direktmappad, set‑associativ, fullt associativ) påverkar sannolikheten för konflikt och prestanda.
- Evictionsstrategier — när cachen är full måste äldre objekt ersättas. Vanliga strategier är:
- LRU (Least Recently Used) — ersätt det objekt som inte använts längst.
- LFU (Least Frequently Used) — ersätt det objekt som använts minst ofta.
- FIFO (First In, First Out) — ersätt det äldsta objektet.
- Random — ersätt ett slumpmässigt valt objekt (enkelt och ibland effektivt).
- Skrivpolicy — vid skrivningar mot cachad data finns två vanliga strategier:
- Write‑through — skriv alltid både i cachen och i det långsammare lagret; enklare att hålla konsekvens men kan vara långsammare.
- Write‑back (write‑behind) — skriv först i cachen och uppdatera det långsammare lagret senare; snabbare men kräver mekanismer för att hantera förlorade uppdateringar eller krascher.
- TTL och invalidation — vissa cacheobjekt får en tidsgräns (Time To Live) eller måste bli invaliderade när originaldata ändras, för att undvika föråldrade kopior.
Cache vs buffert
En buffert är nära besläktad med en cache men skiljer sig i synliga avsikter: klienten som använder en buffert vet vanligtvis att data ligger i en buffert (t.ex. en I/O‑buffert för att jämna ut överföringshastigheter). I en cache behöver klienten inte vara medveten om cachens existens — cachen fungerar transparent för att snabba upp åtkomst eller beräkningar.
Begränsningar och utmaningar
- Konsistens — att hålla cachad data synkroniserad med originalet kan vara komplext, särskilt i distribuerade system.
- Köldstart (warm‑up) — en ny cache är tom och ger initialt inga fördelar tills den fyllts med användbara objekt.
- Felhantering — vid systemkrasch eller nätverksproblem måste eventuella skrivningar i write‑back‑cache hanteras för att undvika dataförlust.
- Felaktiga antaganden om lokalitet — om arbetsbelastningen inte uppvisar temporal eller rumslig lokalitet fungerar cachen dåligt och kan till och med förvärra prestanda.
Praktiska exempel
- En webbläsare sparar foton och script så att återbesök på en webbsida blir snabba.
- Processorns L1‑cache håller instruktioner och data som används frekvent för att undvika att vänta på minnet.
- Ett ramverk kan cacha resultat av en databasfråga i minnet (t.ex. Redis) för att minska antalet dyra frågor.
Sammanfattningsvis är en cache ett tillfälligt lagringsområde som sparar ofta använda data i en snabbare (men normalt mindre) minnesenhet. Genom att utnyttja referenslokalitet och välja lämpliga strategier för ersättning och skrivning kan man avsevärt förbättra systemets responsivitet och minska belastningen på långsammare resurser.

