Caching – Ein Überblick

Früher oder später muss sich jeder Entwickler mit der Performance seiner Anwendung beschäftigen und sehr häufig stellt das Laden der Daten ein Nadelöhr dar. Hier kann die richtige Caching-Strategie geradezu Wunder wirken. Im Folgenden wird es also um die verschiedenen Möglichkeiten des Cachings gehen.

Arten von Caches

Mit Cache ist allgemein nichts anderes gemeint als ein Speicher, der die Daten schneller zur Verfügung stellt als die generelle Bezugsquelle (meist eine Datenbank). Dabei ist es nicht zwingend notwendig das Speichermedium zu wechseln. So kann eine Tabelle in der selben Datenbank, die aggregierte Daten enthält und per Cronjob befüllt wird, bereits einen Cache darstellen.

Caches können nach verschiedenen Gesichtspunkten kategorisiert werden, die alle Auswirkungen auf die Geschwindigkeit, die Verfügbarkeit und die Speicheranforderungen haben. Hier ist immer ein Kompromiss notwendig. Je schneller die Daten bereit stehen sollen, desto höher sind die Kosten.

SoftwareWoWieWasGeschwin­dig­keitSpeicher­verbrauch
APC, XCacheLokalRAM, Shared MemoryKey-Valuesehr schnellsehr hoch
MemCacheLANRAMKey-Valueschnellmoderat
DateiLokalFestplatteTextschnellkeiner
RedisLANRAM + FestplatteKey-Value, Hashmap, Listen, ...schnellmoderat

Ist ein Cache lokal, dann bedeutet dies, dass jeder Webserver die Daten für sich erzeugen und in einem eigenen Cache ablegen muss. Der Vorteil nicht auf das Netzwerk warten zu müssen, wird also durch gesteigerte Anforderungen an die Serverhardware (insbesondere RAM) erkauft. Außerdem kommt es bei einem Cache-Reset zu starken Lastspitzen, wenn alle Webserver gleichzeitig ihren Cache füllen.

Speichert der Cache nicht auf Festplatte, sondern hält die Daten nur im RAM vor, dann sind sie bei einem Serverausfall verloren. Das ist aber solange der Cache lediglich als Lesepuffer verwendet wird irrelevant. Es bedeutet aber auch, dass der Speicherplatz begrenzt (oder teuer) ist.

Die Möglichkeit eine Datei als Zwischenspeicher zu verwenden, ist hier aufgeführt, weil sie häufig von Template-Engines und Frameworks genutzt wird um „compilierte“ Versionen der Templates oder durch Annotationen erweiterte Funktionsumfänge vorzuhalten.

Auf der nächsten Seite wird es um Strategien beim Caching gehen.