Start · Sprachen · PHP · Referenz · memcache_increment

memcache_increment

Funktion

Erhöht den numerischen Wert eines vorhandenen Memcache-Eintrags um den angegebenen Betrag.

seit PHP 4.0.0 Kategorie: db

Signatur

memcache_increment(Memcache $memcache, string $key, int $value = 1): int|false

Beschreibung

memcache_increment() inkrementiert den aktuell gespeicherten numerischen Wert eines Schlüssels im Memcache-Server um den angegebenen Betrag. Die Funktion ist der prozedurale Gegensatz zur objektorientierten Methode Memcache::increment().

Der Eintrag muss bereits im Cache vorhanden und als numerischer Wert gespeichert sein. Ist der Wert kein numerischer String, wird er in vielen Implementierungen als 0 behandelt, bevor das Inkrement addiert wird. Ist der Schlüssel nicht vorhanden, gibt die Funktion false zurück – es wird kein neuer Eintrag angelegt.

Typische Einsatzfälle sind Seitenaufrufzähler, Rate-Limiting, Session-Counter oder andere Szenarien, bei denen ein Zähler atomisch und ohne Race-Conditions hochgezählt werden muss. Da die Operation serverseitig atomar erfolgt, eignet sie sich für hochfrequente parallele Zugriffe besser als ein Lesen-Modifizieren-Schreiben-Zyklus.

Hinweis: Diese Funktion gehört zur älteren memcache-Erweiterung (PECL). Für neue Projekte empfiehlt sich die memcached-Erweiterung mit Memcached::increment().

Parameter

Name Typ Default Beschreibung
$memcache Pflicht Memcache Eine aktive Memcache-Verbindungsressource, die zuvor mit memcache_connect() oder memcache_pconnect() erzeugt wurde.
$key Pflicht string Der Schlüssel des Cache-Eintrags, dessen Wert erhöht werden soll.
$value int 1 Der Betrag, um den der aktuelle Wert erhöht werden soll. Standardmäßig 1.

Rückgabewert

Typ
int|false
Beschreibung
Gibt den neuen, bereits inkrementierten Wert als int zurück, wenn die Operation erfolgreich war. Gibt false zurück, wenn der Schlüssel nicht existiert oder ein Fehler aufgetreten ist.

Beispiele

Einfacher Seitenaufrufzähler

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

// Eintrag initialisieren, falls noch nicht vorhanden
if (memcache_get($mc, 'page_views') === false) {
    memcache_set($mc, 'page_views', 0, 0, 0);
}

// Zähler um 1 erhöhen
$newValue = memcache_increment($mc, 'page_views');

echo 'Seitenaufrufe: ' . $newValue;

memcache_close($mc);
Seitenaufrufe: 1

Rate-Limiting: Anfragen pro Minute zählen

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

$ip  = '192.168.1.1';
$key = 'rate_limit_' . md5($ip);
$max = 60;

$current = memcache_get($mc, $key);

if ($current === false) {
    // Ersten Eintrag mit 60 Sekunden TTL anlegen
    memcache_set($mc, $key, 1, 0, 60);
    $current = 1;
} else {
    $current = memcache_increment($mc, $key, 1);
}

if ($current > $max) {
    echo 'Rate-Limit überschritten. Bitte warten.';
} else {
    echo 'Anfrage erlaubt. Aktueller Zähler: ' . $current;
}

memcache_close($mc);
Anfrage erlaubt. Aktueller Zähler: 1

// Wichtig · Fallstricke

Atomarität: Die Inkrement-Operation ist serverseitig atomar, was Race-Conditions bei gleichzeitigen Zugriffen verhindert. Ein manuelles Lesen und Schreiben wäre in hochfrequenten Szenarien fehleranfällig.

Negativer Wert: Das Übergeben eines negativen value-Parameters führt zu undefiniertem Verhalten. Zum Verringern eines Wertes sollte stattdessen memcache_decrement() verwendet werden.

Kein automatisches Anlegen: Existiert der Schlüssel nicht, legt memcache_increment() keinen neuen Eintrag an – im Gegensatz zu einigen anderen Cache-Operationen. Der Eintrag muss zuvor explizit mit memcache_set() oder memcache_add() erstellt werden.

Erweiterung: Diese Funktion gehört zur älteren memcache-PECL-Erweiterung. Für neue Projekte wird die modernere memcached-Erweiterung empfohlen.