Signatur
Beschreibung
apcu_store() schreibt einen Wert unter einem Schlüssel in den gemeinsamen APCu-Speicher (Shared Memory), der für alle PHP-Prozesse/Anfragen desselben Webservers zugänglich ist. Damit eignet sich die Funktion hervorragend als schneller In-Process-Cache für teure Datenbankabfragen, berechnete Ergebnisse oder Konfigurationsdaten.
Wird als erster Parameter ein assoziatives Array übergeben, speichert apcu_store() alle enthaltenen Schlüssel-Wert-Paare in einem einzigen Aufruf. In diesem Fall ist der zweite Parameter ($value) bedeutungslos. Rückgegeben wird dann ein Array mit den Schlüsseln, für die das Speichern fehlgeschlagen ist.
Der optionale Parameter $ttl (Time-to-Live) gibt an, wie lange der Eintrag in Sekunden im Cache verbleibt. Der Wert 0 bedeutet, dass der Eintrag solange gespeichert bleibt, bis der Cache manuell geleert wird oder der Speicher voll ist und ältere Einträge verdrängt werden.
Im Gegensatz zu apcu_add() überschreibt apcu_store() einen bereits vorhandenen Eintrag mit demselben Schlüssel, ohne Fehler zu melden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $key Pflicht | string|array | Der eindeutige Schlüssel, unter dem der Wert gespeichert wird. Wird ein assoziatives Array übergeben, werden alle Schlüssel-Wert-Paare des Arrays gespeichert. | |
| $value | mixed | null | Der zu speichernde Wert. Kann jeder serialisierbare PHP-Typ sein (int, string, array, Objekt etc.). Wird ignoriert, wenn $key ein Array ist. |
| $ttl | int | 0 | Time-to-Live in Sekunden. Nach Ablauf dieser Zeit wird der Eintrag aus dem Cache entfernt. 0 bedeutet kein automatischer Ablauf. |
Rückgabewert
true bei Erfolg oder false bei einem Fehler zurück, wenn ein einzelner Schlüssel gespeichert wurde. Wird ein Array übergeben, gibt die Funktion ein Array mit allen Schlüsseln zurück, für die das Speichern fehlgeschlagen ist (leeres Array bei vollständigem Erfolg).Beispiele
Einfachen Wert mit TTL cachen
<?php
// Datenbankabfrage-Ergebnis für 5 Minuten cachen
$cacheKey = 'user_list';
$users = apcu_fetch($cacheKey, $success);
if (!$success) {
// Simuliert eine teure Datenbankabfrage
$users = ['Alice', 'Bob', 'Charlie'];
apcu_store($cacheKey, $users, 300); // 300 Sekunden = 5 Minuten
echo "Daten neu geladen und gecacht.\n";
} else {
echo "Daten aus Cache geladen.\n";
}
print_r($users);
Mehrere Werte auf einmal speichern
<?php
// Mehrere Konfigurationswerte gleichzeitig speichern
$config = [
'site_name' => 'Meine Webseite',
'max_upload' => 10485760,
'maintenance' => false,
];
$failed = apcu_store($config, null, 600);
if (empty($failed)) {
echo "Alle Konfigurationswerte erfolgreich gespeichert.\n";
} else {
echo "Folgende Schlüssel konnten nicht gespeichert werden: ";
echo implode(', ', $failed) . "\n";
}
// Einzelnen Wert abrufen
echo apcu_fetch('site_name') . "\n";
Vorhandenen Eintrag überschreiben
<?php
apcu_store('counter', 1);
echo apcu_fetch('counter') . "\n"; // 1
// apcu_store überschreibt bestehende Einträge (im Gegensatz zu apcu_add)
apcu_store('counter', 99);
echo apcu_fetch('counter') . "\n"; // 99
// Wichtig · Fallstricke
CLI-Hinweis: APCu ist im CLI-Modus standardmäßig deaktiviert. Um es im CLI zu aktivieren (z. B. für Tests), muss apc.enable_cli=1 in der php.ini gesetzt werden.
Speicherlimit: Ist der APCu-Speicher voll (apc.shm_size), kann apcu_store() fehlschlagen und false zurückgeben. Ein zu kleines Speicherlimit führt zu häufigen Cache-Misses.
Nebenläufigkeit: APCu bietet keine transaktionalen Garantien. Für atomare Lese-Schreib-Operationen (z. B. Zähler) sollte stattdessen apcu_inc() oder apcu_dec() verwendet werden, um Race Conditions zu vermeiden.
Serialisierung: Gespeicherte Werte werden von APCu intern serialisiert. Ressourcen (z. B. Datenbankverbindungen) können nicht gecacht werden.