Signatur
Beschreibung
apcu_delete() löscht Einträge aus dem APCu-Benutzercache. Die Funktion akzeptiert entweder einen einzelnen Schlüssel als string, ein array mehrerer Schlüssel oder ein APCUIterator-Objekt, das eine reguläre Ausdrucks-basierte Auswahl von Einträgen ermöglicht.
Beim Übergeben eines einzelnen Strings gibt die Funktion true zurück, wenn der Eintrag erfolgreich entfernt wurde, und false, wenn der Schlüssel nicht gefunden wurde. Bei einem Array von Schlüsseln wird ein Array der Schlüssel zurückgegeben, die nicht gelöscht werden konnten — ein leeres Array bedeutet vollständigen Erfolg.
Diese Funktion ist besonders nützlich, um gecachte Daten gezielt zu invalidieren, wenn sich die zugrunde liegenden Daten ändern — etwa nach einem Datenbankupdate oder einer Konfigurationsänderung. Im Gegensatz zu apcu_clear_cache(), das den gesamten Cache leert, ermöglicht apcu_delete() ein selektives Löschen ohne Cache-Stampede.
Zu beachten ist, dass APCu ausschließlich im CLI-Modus und im Webserver-Modus verfügbar ist und bei jedem Neustart des PHP-Prozesses bzw. Webservers automatisch geleert wird. Die Funktion ist nur verfügbar, wenn die APCu-Erweiterung installiert und aktiviert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $key Pflicht | APCUIterator|array|string | Der zu löschende Schlüssel als string, ein array mehrerer Schlüssel oder ein APCUIterator-Objekt zur Auswahl mehrerer Einträge per regulärem Ausdruck. |
Rückgabewert
string-Schlüssel: true bei Erfolg, false wenn der Schlüssel nicht existiert. Bei einem array oder APCUIterator: ein Array der Schlüssel, die nicht gelöscht werden konnten (leeres Array = vollständiger Erfolg).Beispiele
Einzelnen Cache-Eintrag löschen
<?php
// Eintrag setzen
apcu_store('user_42', ['name' => 'Maria', 'email' => 'maria@example.com']);
// Eintrag nach Datenbankaktualisierung invalidieren
if (apcu_delete('user_42')) {
echo "Cache-Eintrag 'user_42' erfolgreich gelöscht.";
} else {
echo "Eintrag nicht im Cache gefunden.";
}
Mehrere Einträge auf einmal löschen
<?php
// Mehrere Einträge setzen
apcu_store('product_1', 'Apfel');
apcu_store('product_2', 'Birne');
apcu_store('product_3', 'Kirsche');
// Mehrere Schlüssel auf einmal entfernen
$failed = apcu_delete(['product_1', 'product_2', 'product_3', 'product_99']);
if (empty($failed)) {
echo "Alle angegebenen Einträge erfolgreich gelöscht.";
} else {
echo "Folgende Schlüssel konnten nicht gelöscht werden: " . implode(', ', $failed);
}
Einträge per Regex mit APCUIterator löschen
<?php
// Mehrere zugehörige Einträge setzen
apcu_store('session_abc123', 'Daten A');
apcu_store('session_def456', 'Daten B');
apcu_store('config_main', 'Konfig');
// Alle Einträge mit Präfix 'session_' löschen
$iterator = new APCUIterator('/^session_/');
$failed = apcu_delete($iterator);
if (empty($failed)) {
echo "Alle Session-Cache-Einträge erfolgreich gelöscht.";
} else {
echo "Fehler beim Löschen einiger Einträge.";
}
// Wichtig · Fallstricke
Verfügbarkeit: APCu muss als PHP-Erweiterung installiert und in der php.ini aktiviert sein (extension=apcu). Im CLI-Kontext teilen sich CLI und Webserver-Prozesse keinen gemeinsamen Cache — Löschoperationen aus der CLI wirken sich nicht auf den Webserver-Cache aus.
Race Conditions: Zwischen dem Prüfen eines Eintrags (apcu_exists()) und dem Löschen (apcu_delete()) kann ein anderer Prozess den Eintrag bereits gelöscht oder neu geschrieben haben. Für atomare Operationen sollte apcu_cas() oder ein geeignetes Locking-Konzept verwendet werden.
Kein Fehler bei fehlendem Schlüssel: Wenn ein Schlüssel nicht im Cache vorhanden ist, wird bei einem einzelnen String false zurückgegeben, ohne eine Warnung oder Exception auszulösen. Bei Arrays taucht der fehlende Schlüssel im Rückgabe-Array auf.