Unter einem Cache versteht man einen digitalen Zwi­schen­spei­cher, der einmal ab­ge­frag­te Daten für einen späteren wie­der­hol­ten Zugriff auf­be­wahrt. Die nach­fol­gen­den Anfragen können dann direkt aus dem Cache be­ant­wor­tet werden, ohne dass die ei­gent­li­che Anwendung hierfür kon­tak­tiert werden muss. Ein typisches Ein­satz­sze­na­rio sind Web­brow­ser: Sie verfügen über einen eigenen Cache, der bestimmte Inhalte einer Website zwi­schen­spei­chern kann. Wird diese Seite zu einem späteren Zeitpunkt erneut besucht, kann sie schneller geladen werden, da die auf­be­wahr­ten Daten direkt aus dem Cache und nicht mehr vom Server abgerufen werden.

De­fi­ni­ti­on: Cache

Ein Cache (aus­ge­spro­chen „cash“, wie engl. für „Bargeld“) ist ein Zwi­schen­spei­cher, der Daten für wie­der­hol­te Zugriffe be­reit­hält. Er ver­rin­gert die Zeit für den wie­der­hol­ten Zugriff auf dieselben Daten. Caches befinden sich als trans­pa­ren­te Schicht zwischen dem Nutzer und der ei­gent­li­chen Quelle der Daten. Der Prozess, Daten im Cache zu speichern, wird als „Caching“ be­zeich­net.

Um das Prinzip eines Cache zu ver­deut­li­chen, nehmen wir das folgende analoge Beispiel aus der Medizin:

Stellen Sie sich eine zahn­ärzt­li­che Be­hand­lung oder einen chir­ur­gi­schen Eingriff vor. Der Arzt bittet die Arzt­hel­fe­rin um eine Ressource, etwa ein Skalpell, ein Des­in­fek­ti­ons­mit­tel oder Ver­bands­ma­te­ri­al. Wurde die Ressource bereits be­reit­ge­legt, kann die Arzt­hel­fe­rin sofort auf die Bitte reagieren und sie dem Arzt reichen. An­dern­falls lo­ka­li­siert die Arzt­hel­fe­rin die Ressource im Me­di­zin­schrank und reicht diese an den Arzt weiter. Nach Benutzung durch den Arzt wird die Ressource von der Arzt­hel­fe­rin für weitere, schnelle Zugriffe be­reit­ge­legt.

Die einzelnen Res­sour­cen sind in der Nutzung nicht komplett un­ab­hän­gig von­ein­an­der: Verlangt der Arzt nach einem Des­in­fek­ti­ons­mit­tel, dann wird er si­cher­lich auch einen Tupfer benötigen, die Nadel ist ohne Faden nicht zu ge­brau­chen. Die Arzt­hel­fe­rin wird die zusammen be­nö­tig­ten Res­sour­cen gemeinsam be­reit­hal­ten, um die Zu­griffs­zeit während der Nutzung zu mi­ni­mie­ren.

Sie sehen: Das Be­reit­hal­ten von Res­sour­cen, die häufig benötigt oder zusammen verwendet werden, ist ein sehr nütz­li­cher und ganz all­täg­li­cher Vorgang. In der digitalen Welt werden diese ver­wand­ten Prozesse allesamt unter dem Begriff „Caching“ zu­sam­men­ge­fasst.

Was ist der Zweck eines Cache?

Der primäre Zweck eines Cache ist es, die Zu­griffs­zeit auf wichtige Daten zu re­du­zie­ren. Als „wichtige“ Daten gelten:

  1. Daten, die häufig benötigt werden: In diesem Fall wäre es ver­schwen­de­risch, die Daten immer wieder aus dem hinter dem Cache liegenden, lang­sa­me­ren Speicher zu laden. Statt­des­sen werden diese mit kürzerer Zu­griffs­zeit aus dem Cache aus­ge­lie­fert.
     
  2. Daten, deren Erzeugung ein auf­wen­di­ger Prozess zugrunde liegt: Manche Daten sind das Ergebnis einer re­chen­in­ten­si­ven Ver­ar­bei­tung, oder die Daten müssen aus ver­schie­de­nen Teilen zu­sam­men­ge­fügt werden. In diesen Fällen bietet es sich an, die fertigen Daten für weitere Abfragen in einem Cache zu speichern.
     
  3. Daten, die zusammen benötigt werden: In diesem Fall wäre es in­ef­fi­zi­ent, die Daten erst dann zu laden, wenn Sie abgerufen werden. Statt­des­sen ist es sinnvoll, die Daten gemeinsam im Cache vor­zu­hal­ten.

Wie funk­tio­niert ein Cache?

Nun gehen wir genauer auf die Funk­ti­ons­wei­se eines Cache ein. Dabei klären wir u. a. die Fragen, wie ein solcher Zwi­schen­spei­cher grund­sätz­lich arbeitet und wo genau er sich befindet.

Grund­le­gen­des Cache-Schema

  1. Eine Anfrage nach einer Ressource wird an das System bzw. die Software, die über einen Cache verfügt, gestellt.
     
  2. Ist die Ressource bereits im Cache enthalten, wird sie aus dem Cache aus­ge­lie­fert. Dieser Fall wird als „Cache Hit“, also „Cache-Treffer“, be­zeich­net.
     
  3. Ist die Ressource nicht im Cache enthalten, wird sie zunächst aus dem da­hin­ter­lie­gen­den System in den Zwi­schen­spei­cher geladen und an­schlie­ßend aus­ge­lie­fert. Dieser Fall wird als „Cache Miss“, in etwa „Cache-Fehl­schuss“, be­zeich­net.
     
  4. Wird dieselbe Ressource in der Zukunft erneut abgefragt, kann sie ebenfalls als Cache Hit aus dem Cache aus­ge­lie­fert werden.

Die Abbildung ver­deut­licht das grund­le­gen­de Schema: Ein Client stellt eine Anfrage nach einer Ressource an den Server (1). Im Fall des „Cache Hit“ ist die Ressource bereits im Cache enthalten und wird sogleich an den Client aus­ge­lie­fert (2). Im Fall des „Cache Miss“ ist die ab­ge­frag­te Ressource nicht im Cache enthalten und wird daher aus dem hinter dem Server liegenden System (hier eine Datenbank) abgefragt (2). Sobald die Ressource vorhanden ist (3), wird sie an den Client aus­ge­lie­fert (4) und für die weitere Nutzung im Cache ge­spei­chert.

Wo befindet sich ein Cache?

Eine Grund­ei­gen­schaft eines Cache ist, dass er „im Ver­bor­ge­nen“ arbeitet. Dieser Umstand spiegelt sich schon im Ursprung des Wortes wider: Das Wort „Cache“ stammt aus dem Fran­zö­si­schen und bedeutet „Versteck“.

Der Cache liegt für Nutzer un­sicht­bar vor dem ei­gent­li­chen Da­ten­spei­cher. Das bedeutet, dass Sie als Nutzer nichts über die internen Ei­gen­schaf­ten des Cache wissen müssen. Sie stellen Anfragen an den Da­ten­spei­cher, ohne zu bemerken, dass diese ei­gent­lich vom Cache be­ant­wor­tet werden.

Wie viele Caches gibt es ty­pi­scher­wei­se?

Für ge­wöhn­lich sind innerhalb eines digitalen Systems immer eine Reihe an Caches aktiv.

Stellen Sie sich den Zugriff auf eine Webseite vor: Ihr Browser kom­mu­ni­ziert mit einem Server und ruft eine Reihe von Res­sour­cen ab. Bis Ihnen die Inhalte der Seite im Browser angezeigt werden, laufen Teile davon ver­mut­lich durch folgende Caches: Prozessor-Cache, System-Cache und Browser-Cache auf Ihrem Gerät sowie CDN (Content Delivery Network) und Web-Cache auf Ser­ver­sei­te.

Vor- und Nachteile eines Cache

Ob eine Anwendung mit einem Cache aus­ge­stat­tet wird, liegt prin­zi­pi­ell im Ermessen des Ent­wick­lers. Wir haben die Vor- und Nachteile der Zwi­schen­spei­cher-Lösung zu­sam­men­ge­fasst.

Vorteil: Enormer Zuwachs an Ge­schwin­dig­keit

Die Ver­wen­dung eines Cache bietet als po­ten­zi­el­len Vorteil einen enormen Zuwachs an Ge­schwin­dig­keit. Eine Be­schleu­ni­gung um einen Faktor von ein­hun­dert ist nicht un­ge­wöhn­lich. Die Be­schleu­ni­gung ergibt sich jedoch nur beim wie­der­hol­ten Zugriff auf dieselben Daten. Wie groß der Zugewinn tat­säch­lich ausfällt, wird also je nach An­wen­dungs­fall stark variieren.

Vorteil: Last­re­du­zie­rung für das hinter dem Cache liegende System

Da ein Cache Daten sehr schnell aus­lie­fert, wird die Last auf das hinter ihm liegende System deutlich reduziert.

Stellen Sie sich als Beispiel vor, dass eine dy­na­mi­sche HTML-Seite aus einem PHP-Template erzeugt wird: Zur Erzeugung der Seite wird auf eine Datenbank zu­ge­grif­fen. Dieser Zugriff ist ver­gleichs­wei­se aufwendig. Ferner ist es nicht trivial, Da­ten­bank­ser­ver zu skalieren, weshalb der Da­ten­bank­zu­griff als „bot­t­len­eck“ (zu Deutsch: „Fla­schen­hals“) den Ge­samt­durch­satz des Systems begrenzen kann. In diesem Fall ist es vor­teil­haft, die ge­ne­rier­te HTML-Seite in einem Web-Cache zwi­schen­zu­spei­chern, um die Kapazität des Da­ten­bank­ser­vers für andere Aufgaben zu nutzen.

Nachteil: Cache-In­va­li­die­rung ist schwierig

Der Begriff Cache-In­va­li­die­rung be­zeich­net die Ent­schei­dung darüber, wann zwi­schen­ge­spei­cher­te Daten nicht mehr aktuell sind und erneuert werden müssen. Erinnern Sie sich an das analoge Beispiel von oben: Die Arzt­hel­fe­rin agiert als Cache für den Arzt, indem sie bereits benutzte Res­sour­cen für den weiteren Gebrauch bereit legt. Da auf der Ablage nur ein be­grenz­ter Platz be­reit­steht, räumt die Arzt­hel­fe­rin während der Be­hand­lung kon­ti­nu­ier­lich auf. Bereits benutzte Res­sour­cen müssen entfernt, neue hin­zu­ge­fügt werden. Unter Umständen entfernt die Arzt­hel­fe­rin auch eine Ressource, die der Arzt noch einmal benötigt. In diesem Fall kommt es kon­zep­tu­ell zu einem Cache Miss. Die Arzt­hel­fe­rin muss die benötigte Ressource dann erst aufwendig lo­ka­li­sie­ren.

Da der Cache Miss kost­spie­lig ist, zielt die optimale Caching-Strategie darauf ab, diesen möglichst zu vermeiden. An­de­rer­seits kann das dazu führen, dass der Cache Daten aus­lie­fert, die nicht mehr aktuell sind. Dieses Problem wird noch ver­schärft, wenn mehrere, hier­ar­chisch an­gren­zen­de Caches aktiv sind. Es kann dann schwierig sein zu bestimmen, wann welche Daten im Cache als nicht mehr aktuell markiert werden sollen.

Liefert ein Cache Daten aus, die nicht mehr aktuell sind, führt dies oft auf der Seite des Anwenders zu seltsamen Problemen: Die besuchte Website hat Dar­stel­lungs­feh­ler oder es er­schei­nen beim Da­ten­ab­ruf Fragmente aus der Ver­gan­gen­heit. Mitunter kann es schwierig sein, die genaue Herkunft der Probleme zu ermitteln, weshalb in diesem Fall das Leeren des Cache die beste Lösung darstellt.

Zitat

„There are only two hard things in Computer Science: cache in­va­li­da­ti­on and naming things.“

„In der In­for­ma­tik gibt es nur zwei schwie­ri­ge Probleme: Cache-In­va­li­die­rung und Namen vergeben.“

Phil Karlton, https://www.mart­in­fow­ler.com/bliki/TwoHard­Things.html

Welche Arten von Caches gibt es?

Caches bestehen aus Hardware- oder Software-Kom­po­nen­ten. Ein Hardware-Cache ist ein schneller Puf­fer­spei­cher, der die Zu­griffs­zei­ten auf den da­hin­ter­lie­gen­den Da­ten­spei­cher ver­rin­gert. Prin­zi­pi­ell sind Hardware-Caches immer sehr klein im Vergleich zur Ge­samt­grö­ße des be­schleu­nig­ten Da­ten­spei­chers.

Dagegen können in Software im­ple­men­tier­te Caches die Größe der hinter ihnen liegenden Ressource sogar über­tref­fen. Dies ist ins­be­son­de­re dann der Fall, wenn sich mehrere Versionen einer Ressource im Cache befinden.

Hier eine Übersicht gängiger mit Caches ver­se­he­ner Res­sour­cen. Dar­ge­stellt sind die Größe des Cache, die Zu­griffs­zeit auf den Cache sowie eine Angabe, wie viel langsamer der Zugriff auf die Ressource ohne Zwi­schen­spei­cher wäre.

Ressource Cache Größe des Cache Zu­griffs­zeit mit Cache × langsamer ohne Cache
Haupt­spei­cher Level 1-Cache (Hardware) Dutzende Kilobyte (KB) Weniger als eine Na­no­se­kun­de (ns) 200 ×
Fest­plat­te Fest­plat­ten-Cache (Hardware) Dutzende Megabyte (MB) Hunderte Na­no­se­kun­den (ns) 100 ×
Browser Browser-Cache (Software) Mehrere Gigabyte (GB) Dutzende Mil­li­se­kun­den (ms) 10–100 ×
Websites CDNs, Google Page Cache, Wayback Machine (Software) Tausende Terabyte (Petabyte, PB) Wenige Sekunden (s) 2–5 ×

Hardware-Caches

Prozessor-Cache

Ein moderner Prozessor arbeitet un­glaub­lich schnell. Die Abläufe auf dem Chip benötigen nur Bruch­tei­le von Na­no­se­kun­den — das ist eine Mil­li­ards­tel Sekunde! Im Gegensatz dazu ist der Zugriff auf den Haupt­spei­cher mit Hunderten von Na­no­se­kun­den ver­gleichs­wei­se langsam. Aus diesem Grund verfügen moderne Pro­zes­so­ren über eine Hier­ar­chie von Prozessor-Caches.

Ein Cache Hit auf dem schnells­ten Prozessor-Cache, bekannt als „Level 1-Cache“ oder „L1-Cache“, ist rund 200 Mal schneller als ein Zugriff auf den Haupt­spei­cher.

Fest­plat­ten-Cache

Eine Fest­plat­te rotiert mit mehreren Tausend Um­dre­hun­gen pro Minute. Der Schreib-Lese-Kopf rast über die Scheiben und liest dabei se­quen­zi­ell Daten aus. Da es sich um einen phy­si­schen Prozess handelt, ist der Zugriff auf eine Fest­plat­te ver­gleichs­wei­se langsam.

Aus diesem Grund verfügt jede Fest­plat­te über einen eigenen kleinen Cache. So müssen zumindest die am häu­figs­ten genutzten Daten – etwa Teile des Be­triebs­sys­tems – nicht immer wieder aufwendig von der Fest­plat­te gelesen werden.

Durch den Fest­plat­ten-Cache können es­sen­zi­el­le Daten ca. 100 Mal schneller geladen werden. Sie sind dadurch für den Nutzer gefühlt „sofort“ vorhanden.

Software-Caches

Browser-Cache

Beim Besuch einer Website werden viele Daten der Seite auf dem Gerät des Besuchers zwi­schen­ge­spei­chert. Neben den ei­gent­li­chen Inhalten gehören dazu ver­schie­de­ne Res­sour­cen wie Bilder, Style­sheets und Ja­va­Script-Dateien. Für ge­wöhn­lich werden viele dieser Res­sour­cen auf mehreren Seiten benötigt. Um das Laden der Seiten zu be­schleu­ni­gen, ist es vor­teil­haft, diese immer wieder be­nö­tig­ten Res­sour­cen im Browser-Cache des lokalen Geräts zu speichern.

So praktisch der Browser-Cache für das Surfen im Netz ist: Er kann auch Probleme ver­ur­sa­chen – etwa dann, wenn die Ent­wick­ler Än­de­run­gen an einer Ressource der Website vor­ge­nom­men haben, im Browser-Cache aber noch die alte Version der Ressource vorhanden ist. In diesem Fall kann es zu Dar­stel­lungs­feh­lern kommen. Abhilfe schafft dann das Leeren des Browser-Cache.

Google Page-Cache

Googles „Im Cache“-Funktion hält die Seiten vieler Websites vorrätig. So kann auf die Seiten auch noch zu­ge­grif­fen werden, wenn die ur­sprüng­li­che Website offline ist. Der Zustand der Seiten ent­spricht dem Datum der letzten In­di­zie­rung durch den Googlebot.

DNS-Cache

Das Domain Name System, kurz DNS, ist ein global ver­teil­tes System zur Über­set­zung von In­ter­net­do­mains in IP-Adressen (bzw. umgekehrt). Das DNS liefert für einen Do­mä­nen­na­men eine IP-Adresse zurück. Bei­spiels­wei­se wird für die Domain ionos.de die IP-Adresse 217.160.86.40 zu­rück­ge­lie­fert.

Bereits be­ant­wor­te­te Anfragen an das DNS werden lokal auf dem eigenen Gerät im DNS-Cache zwi­schen­ge­spei­chert. So ist jede Auflösung immer gleich schnell.

Doch auch die Nutzung des DNS-Cache kann zu Problemen führen – bei­spiels­wei­se, wenn sich durch einen Ser­ver­um­zug die zu einer Domain gehörige IP-Adresse geändert hat, die alte Adresse jedoch noch im lokalen DNS-Cache hin­ter­legt ist. In diesem Fall schlägt der Ver­bin­dungs­auf­bau mit dem Server fehl. Abhilfe schafft dann das Löschen des DNS-Cache.

Content Delivery Network (CDN)

Global verteilte Content Delivery Networks (dt. „Inhalte-Aus­lie­fe­rungs-Netzwerke“) halten einen Großteil der Daten beliebter Websites auf so­ge­nann­ten Edge Nodes („randnahen Knoten“) vor. Diese Edge Nodes spiegeln die Daten am „Rand“ des Internets. Die Knoten sind lokal nahe am Benutzer an­ge­sie­delt und technisch darauf ausgelegt, Daten möglichst schnell aus­zu­lie­fern. Ein CDN fungiert als Cache für die Daten der ent­hal­te­nen Websites. Dadurch werden die Zu­griffs­zei­ten ins­be­son­de­re auf Streaming-Angebote und Websites minimiert.

Web-Cache

Ein Web-Cache hält Web­do­ku­men­te wie HTML-Seiten, Bilder, Style­sheets, oder Ja­va­Script-Dateien für die wie­der­hol­te Nutzung vor. Moderne Web-Caches wie Varnish und Redis legen häufig benutzte Daten im Ar­beits­spei­cher ab und erzielen damit besonders geringe Ant­wort­zei­ten.

Werden die Daten erneut abgefragt, erfordert die Antwort nur einen sehr schnellen Spei­cher­zu­griff. So werden die Ant­wort­zei­ten drastisch ver­rin­gert und die Last für die hinter dem Cache liegenden Systeme, wie Webserver und Datenbank, reduziert. Weitere bekannte Web-Caches sind OPcache und der Al­ter­na­ti­ve PHP Cache (APC).

Zum Hauptmenü