Start · Sprachen · PHP · Referenz · memcache_get_stats

memcache_get_stats

Funktion

Liefert Statistiken eines Memcache-Servers, optional gefiltert nach Typ, Slab-ID und Limit.

seit PHP 2.0.0 Kategorie: db

Signatur

memcache_get_stats(Memcache $memcache, string $type = null, int $slabid = 0, int $limit = 100): array|false

Beschreibung

memcache_get_stats() ruft Statusinformationen vom verbundenen Memcache-Server ab und gibt diese als assoziatives Array zurück. Die Funktion ist die prozedurale Entsprechung der objektorientierten Methode Memcache::getStats().

Die zurückgegebenen Statistiken enthalten unter anderem Angaben zur Anzahl der gespeicherten Items, zur aktuellen Speichernutzung, zu Cache-Hits und -Misses sowie zur Serverversion. Dies ist besonders nützlich für Monitoring-Anwendungen oder zur Diagnose von Performance-Problemen.

Mit dem Parameter type lässt sich die Art der zurückgegebenen Statistiken steuern. Mögliche Werte sind z. B. 'reset', 'malloc', 'maps', 'cachedump', 'slabs', 'items' und 'sizes'. Besonders 'cachedump' erfordert zusätzlich die Angabe von slabid und limit, um gezielt Einträge eines bestimmten Slabs abzurufen.

Hinweis: Die PECL-Erweiterung memcache (nicht zu verwechseln mit memcached) gilt als veraltet. Für neue Projekte sollte die neuere memcached-Erweiterung verwendet werden.

Parameter

Name Typ Default Beschreibung
$memcache Pflicht Memcache Eine aktive Memcache-Verbindungsressource, die zuvor mit memcache_connect() oder memcache_pconnect() erstellt wurde.
$type string null Art der abzurufenden Statistiken. Mögliche Werte: 'reset', 'malloc', 'maps', 'cachedump', 'slabs', 'items', 'sizes'. Wird null übergeben, werden die allgemeinen Statistiken zurückgegeben.
$slabid int 0 Wird nur in Kombination mit type = 'cachedump' verwendet. Gibt die Slab-ID an, deren Einträge aufgelistet werden sollen.
$limit int 100 Maximale Anzahl der bei cachedump zurückgegebenen Einträge pro Slab.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array mit den Serverstatistiken zurück. Im Fehlerfall (z. B. keine Verbindung) wird false zurückgegeben.

Beispiele

Allgemeine Serverstatistiken abrufen

<?php
$memcache = memcache_connect('localhost', 11211);

if ($memcache === false) {
    die('Verbindung zum Memcache-Server fehlgeschlagen.');
}

$stats = memcache_get_stats($memcache);

if ($stats !== false) {
    echo 'Memcache-Version: ' . $stats['version'] . PHP_EOL;
    echo 'Aktuell gespeicherte Items: ' . $stats['curr_items'] . PHP_EOL;
    echo 'Gesamte Verbindungen: ' . $stats['total_connections'] . PHP_EOL;
    echo 'Cache-Hits: ' . $stats['get_hits'] . PHP_EOL;
    echo 'Cache-Misses: ' . $stats['get_misses'] . PHP_EOL;
} else {
    echo 'Statistiken konnten nicht abgerufen werden.';
}

memcache_close($memcache);
Memcache-Version: 1.6.17 Aktuell gespeicherte Items: 42 Gesamte Verbindungen: 1500 Cache-Hits: 9800 Cache-Misses: 200

Slab-Statistiken abrufen

<?php
$memcache = memcache_connect('localhost', 11211);

if ($memcache === false) {
    die('Verbindung fehlgeschlagen.');
}

// Slab-Statistiken abrufen
$slabStats = memcache_get_stats($memcache, 'slabs');

if ($slabStats !== false) {
    foreach ($slabStats as $key => $value) {
        if (is_array($value)) {
            echo "Slab {$key}:" . PHP_EOL;
            foreach ($value as $k => $v) {
                echo "  {$k}: {$v}" . PHP_EOL;
            }
        } else {
            echo "{$key}: {$value}" . PHP_EOL;
        }
    }
} else {
    echo 'Slab-Statistiken nicht verfügbar.';
}

memcache_close($memcache);
Slab 1: chunk_size: 96 chunks_per_page: 10922 total_pages: 1 total_chunks: 10922 used_chunks: 1 free_chunks: 10921 active_slabs: 1 total_malloced: 1048512

Cache-Dump eines bestimmten Slabs

<?php
$memcache = memcache_connect('localhost', 11211);

if ($memcache === false) {
    die('Verbindung fehlgeschlagen.');
}

// Zuerst Slab-IDs ermitteln
$slabs = memcache_get_stats($memcache, 'slabs');

// Cache-Dump von Slab 1, max. 20 Einträge
$dump = memcache_get_stats($memcache, 'cachedump', 1, 20);

if (!empty($dump)) {
    foreach ($dump as $key => $info) {
        echo "Key: {$key}, Größe: {$info[0]} Bytes, Ablauf: {$info[1]}" . PHP_EOL;
    }
} else {
    echo 'Keine Einträge in Slab 1 gefunden.';
}

memcache_close($memcache);
Key: user_session_abc123, Größe: 512 Bytes, Ablauf: 1700000000 Key: product_data_42, Größe: 2048 Bytes, Ablauf: 1700003600

// Wichtig · Fallstricke

Sicherheitshinweis: Der cachedump-Typ kann sensible Schlüsselnamen im Cache offenlegen. Diese Funktion sollte niemals in einer öffentlich zugänglichen Anwendung ohne Zugangskontrolle verwendet werden.

Deprecation-Hinweis: Die memcache-PECL-Erweiterung wird nicht mehr aktiv weiterentwickelt. Für neue Projekte wird die Verwendung der modernen memcached-Erweiterung empfohlen, die unter anderem konsistentes Hashing und SASL-Authentifizierung unterstützt.

Der cachedump-Befehl ist auf dem Memcache-Server standardmäßig ein relativ teurer Vorgang und sollte nicht in hochfrequentierten Produktionsumgebungen eingesetzt werden, da er den Server kurzzeitig blockieren kann.