Start · Sprachen · PHP · Referenz · apcu_key_info

apcu_key_info

Funktion

Liefert detaillierte Metainformationen über einen bestimmten Schlüssel im APCu-Cache.

seit PHP 5.1.0 Kategorie: misc

Signatur

apcu_key_info(string $key): array|false

Beschreibung

apcu_key_info() gibt ein assoziatives Array mit Metadaten zu einem gespeicherten Cache-Eintrag zurück. Dazu gehören unter anderem Informationen über Erstellungszeit, Ablaufzeit (TTL), Zugriffszähler und die Größe des gespeicherten Wertes. Mit diesen Daten lässt sich der Zustand einzelner Cache-Einträge präzise überwachen und debuggen.

Die Funktion ist besonders nützlich in Monitoring- oder Debugging-Szenarien, wenn man nicht nur prüfen möchte, ob ein Schlüssel existiert (apcu_exists()), sondern auch nachvollziehen will, wann er zuletzt geschrieben wurde, wie oft er abgerufen wurde oder wann er abläuft.

Existiert der angegebene Schlüssel nicht im Cache, gibt die Funktion false zurück. Dies ermöglicht eine einfache Fehlerbehandlung. Zu beachten ist, dass die verfügbaren Felder im zurückgegebenen Array je nach APCu-Version leicht variieren können.

Parameter

Name Typ Default Beschreibung
$key Pflicht string Der Name des Cache-Schlüssels, über den Informationen abgerufen werden sollen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit Metadaten zum Cache-Eintrag zurück. Typische Felder sind: hits (Anzahl der Zugriffe), access_time (letzter Zugriff als Unix-Timestamp), mtime (Erstellungs-/Änderungszeit), creation_time (Erstellungszeit), deletion_time (Löschzeitpunkt, 0 wenn nicht gelöscht), expunge_time, num_entries, mem_size (Speicherbedarf in Bytes) sowie ttl (Time-to-Live in Sekunden, 0 = unbegrenzt). Existiert der Schlüssel nicht, wird false zurückgegeben.

Beispiele

Grundlegende Nutzung: Informationen zu einem Cache-Eintrag abrufen

<?php
// Einen Wert mit TTL von 60 Sekunden im Cache speichern
apcu_store('user_42', ['name' => 'Max Mustermann', 'role' => 'admin'], 60);

// Metainformationen zum Schlüssel abrufen
$info = apcu_key_info('user_42');

if ($info !== false) {
    echo 'Schlüssel existiert im Cache.' . PHP_EOL;
    echo 'Erstellt am:     ' . date('Y-m-d H:i:s', $info['creation_time']) . PHP_EOL;
    echo 'Letzter Zugriff: ' . date('Y-m-d H:i:s', $info['access_time']) . PHP_EOL;
    echo 'Zugriffe gesamt: ' . $info['hits'] . PHP_EOL;
    echo 'Speicherbedarf:  ' . $info['mem_size'] . ' Bytes' . PHP_EOL;
    echo 'TTL:             ' . $info['ttl'] . ' Sekunden' . PHP_EOL;
} else {
    echo 'Schlüssel nicht im Cache vorhanden.';
}
Schlüssel existiert im Cache. Erstellt am: 2024-06-01 12:00:00 Letzter Zugriff: 2024-06-01 12:00:00 Zugriffe gesamt: 0 Speicherbedarf: 248 Bytes TTL: 60 Sekunden

Ablaufzeit eines Cache-Eintrags berechnen

<?php
apcu_store('session_token', 'abc123xyz', 300);

$info = apcu_key_info('session_token');

if ($info !== false && $info['ttl'] > 0) {
    $expires_at = $info['creation_time'] + $info['ttl'];
    $remaining  = $expires_at - time();

    if ($remaining > 0) {
        echo 'Cache läuft ab in: ' . $remaining . ' Sekunden.' . PHP_EOL;
        echo 'Ablaufzeitpunkt:   ' . date('H:i:s', $expires_at) . PHP_EOL;
    } else {
        echo 'Cache-Eintrag ist bereits abgelaufen (wartet auf Bereinigung).';
    }
} else {
    echo 'Schlüssel nicht gefunden oder kein TTL gesetzt.';
}
Cache läuft ab in: 298 Sekunden. Ablaufzeitpunkt: 12:05:00

// Wichtig · Fallstricke

Hinweis zur CLI: APCu ist im CLI-Modus standardmäßig deaktiviert. Um es dort zu aktivieren, muss apc.enable_cli=1 in der php.ini gesetzt sein. Andernfalls gibt apcu_key_info() stets false zurück.

Verfügbarkeit der Felder: Die genaue Zusammensetzung des zurückgegebenen Arrays ist nicht durch einen stabilen API-Vertrag garantiert. In unterschiedlichen APCu-Versionen können Feldnamen abweichen oder fehlen. Greife daher mit isset() auf einzelne Felder zu, bevor du sie verwendest.

Kein Locking: Die zurückgegebenen Daten stellen eine Momentaufnahme dar. In Umgebungen mit hoher Parallelität können sich die Werte zwischen dem Aufruf von apcu_key_info() und der Auswertung bereits geändert haben.