Einleitung: Warum Caching die Grundlage der PHP-Leistung ist
\n\nJeder PHP-Entwickler stößt früher oder später auf Leistungsprobleme. Langsame Seitenladezeiten, hoher Speicherverbrauch des Servers und häufige Datenbankabfragen sind Symptome fehlenden durchdachten Cachings. In der modernen Webentwicklung ist Caching kein Luxus, sondern eine Notwendigkeit. Ohne es wird selbst der optimierteste Code unter hoher Last langsamer.
\n\nIn diesem Artikel betrachten wir drei zentrale Ansätze zum Caching in PHP: Redis, Memcached und integrierte Lösungen (APCu, OPcache, Datei-Caching). Sie erfahren, wie Sie das richtige Werkzeug für eine bestimmte Aufgabe auswählen, sehen funktionierende Codebeispiele und erhalten praktische Empfehlungen zur Implementierung.
\n\n1. Integrierte PHP-Lösungen: APCu, OPcache und Datei-Caching
\n\n1.1. OPcache – Bytecode-Caching
\n\nOPcache ist ein in PHP integrierter Mechanismus, der kompilierten Bytecode von Skripten im Speicher kompiliert und speichert. Anstatt jedes Mal eine PHP-Datei zu parsen und zu kompilieren, verwendet OPcache das fertige Ergebnis. Dies bringt eine Geschwindigkeitssteigerung von bis zu 30-50 % ohne eine einzige Codezeile.
\n\nKonfiguration in php.ini:
\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.revalidate_freq=2\n\nVerwenden Sie die folgende Funktion, um die Arbeit von OPcache zu überprüfen:
\n<?php\nvar_dump(opcache_get_status());\n?>\n\n1.2. APCu – Daten-Caching im Speicher
\n\nAPCu (Alternative PHP Cache) ist eine Erweiterung zum Speichern beliebiger Daten im gemeinsamen Speicher. Ideal zum Cachen von Ergebnissen aufwändiger Berechnungen, Konfigurationen oder Daten, die sich selten ändern.
\n\nBeispiel für Caching mit APCu:
\n<?php\n// Daten für 3600 Sekunden (1 Stunde) im Cache speichern\n$data = ['users' => 1500, 'status' => 'active'];\napcu_store('app_stats', $data, 3600);\n\n// Aus dem Cache lesen\n$cached = apcu_fetch('app_stats');\nif ($cached === false) {\n // Daten nicht im Cache – neu berechnen\n $cached = computeExpensiveData();\n apcu_store('app_stats', $cached, 3600);\n}\n?>\n\n1.3. Datei-Caching – einfacher Start ohne zusätzliche Erweiterungen
\n\nWenn keine Möglichkeit besteht, Redis oder Memcached zu installieren, verwenden Sie das Dateisystem. Es ist langsamer, funktioniert aber auf jedem Hosting.
\n\n<?php\nclass FileCache {\n private $cacheDir;\n \n public function __construct($dir = '/tmp/php_cache/') {\n $this->cacheDir = $dir;\n if (!is_dir($dir)) {\n mkdir($dir, 0777, true);\n }\n }\n \n public function get($key, $ttl = 3600) {\n $file = $this->cacheDir . md5($key) . '.cache';\n if (!file_exists($file)) return null;\n \n if (time() - filemtime($file) > $ttl) {\n unlink($file);\n return null;\n }\n \n return unserialize(file_get_contents($file));\n }\n \n public function set($key, $data) {\n $file = $this->cacheDir . md5($key) . '.cache';\n file_put_contents($file, serialize($data));\n }\n}\n\n// Verwendung\n$cache = new FileCache();\n$result = $cache->get('expensive_query');\nif ($result === null) {\n $result = $db->query('SELECT ...');\n $cache->set('expensive_query', $result);\n}\n?>\n\n2. Memcached – verteiltes Caching für hohe Lasten
\n\n2.1. Was ist Memcached und wann wird es verwendet
\n\nMemcached ist ein verteiltes Caching-System im Arbeitsspeicher. Es arbeitet nach dem Key-Value-Prinzip und eignet sich ideal zum Cachen von Ergebnissen von SQL-Abfragen, Benutzersitzungen und HTML-Fragmenten. Hauptvorteile:
\n- \n
- Einfache Installation und Konfiguration \n
- Hohe Geschwindigkeit \n