Signatur
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
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);
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);
// 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.