Signatur
Beschreibung
memcache_decrement() vermindert den aktuell gespeicherten numerischen Wert eines Memcache-Schlüssels um den angegebenen Betrag ($value). Die Funktion ist das prozedurale Äquivalent zur Methode Memcache::decrement() und arbeitet atomar auf dem Memcache-Server, sodass Race Conditions bei gleichzeitigen Zugriffen vermieden werden.
Typische Anwendungsfälle sind das Dekrementieren von Zählern (z. B. verfügbare Ressourcen, verbleibende API-Aufrufe oder Download-Kontingente). Der gespeicherte Wert wird dabei als vorzeichenloser 64-Bit-Integer behandelt; er kann nicht unter 0 fallen – erreicht der Wert 0, bleibt er dort.
Existiert der angegebene Schlüssel nicht oder enthält er keinen numerischen Wert, gibt die Funktion false zurück. Im Gegensatz zu memcache_increment() legt memcache_decrement() den Eintrag nicht automatisch an, wenn er fehlt.
Die objektorientierte Variante ist Memcache::decrement(). Für die neuere Memcached-Extension (mit d am Ende) steht Memcached::decrement() zur Verfügung, das eine etwas andere API bietet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $memcache Pflicht | Memcache | Eine aktive Memcache-Verbindungsressource, die zuvor mit memcache_connect() oder memcache_pconnect() erstellt wurde. |
|
| $key Pflicht | string | Der Schlüssel (Key) des Eintrags, dessen Wert dekrementiert werden soll. | |
| $value | int | 1 | Der Betrag, um den der Wert verringert werden soll. Standardmäßig wird um 1 dekrementiert. |
Rückgabewert
int zurück. Bei Misserfolg – z. B. wenn der Schlüssel nicht existiert oder kein numerischer Wert gespeichert ist – wird false zurückgegeben.Beispiele
Einfaches Dekrementieren eines Zählers
<?php
// Verbindung zum Memcache-Server herstellen
$memcache = memcache_connect('localhost', 11211);
// Ausgangswert setzen
memcache_set($memcache, 'download_quota', 10, 0, 3600);
// Wert um 1 verringern (Standard)
$neuerWert = memcache_decrement($memcache, 'download_quota');
echo 'Verbleibende Downloads: ' . $neuerWert . PHP_EOL; // 9
// Wert um 3 verringern
$neuerWert = memcache_decrement($memcache, 'download_quota', 3);
echo 'Verbleibende Downloads: ' . $neuerWert . PHP_EOL; // 6
memcache_close($memcache);
Prüfung auf Fehler beim Dekrementieren
<?php
$memcache = memcache_connect('localhost', 11211);
// Versuch, einen nicht vorhandenen Schlüssel zu dekrementieren
$ergebnis = memcache_decrement($memcache, 'nicht_vorhanden');
if ($ergebnis === false) {
echo 'Schlüssel existiert nicht oder ist nicht numerisch.' . PHP_EOL;
} else {
echo 'Neuer Wert: ' . $ergebnis . PHP_EOL;
}
// Wert von 0 kann nicht weiter sinken
memcache_set($memcache, 'zaehler', 0, 0, 60);
$ergebnis = memcache_decrement($memcache, 'zaehler', 5);
echo 'Wert bei 0: ' . $ergebnis . PHP_EOL; // bleibt 0
memcache_close($memcache);
// Wichtig · Fallstricke
Nicht-Existenz des Schlüssels: Fehlt der Eintrag im Cache, wird kein neuer Eintrag angelegt – dies unterscheidet sich von manchen anderen Cache-Operationen. Der Rückgabewert false muss daher mit === geprüft werden, da 0 ein valider Rückgabewert ist.
Minimalwert: Der Wert wird intern als vorzeichenloser Integer behandelt und kann nicht negativ werden. Wenn das Dekrementieren zu einem negativen Ergebnis führen würde, wird der Wert auf 0 gesetzt.
Deprecation / Extension: Die memcache-Extension (ohne d) gilt als veraltet und wird aktiv durch die memcached-Extension ersetzt. Für neue Projekte sollte Memcached::decrement() bevorzugt werden.
Atomarität: Die Operation wird atomar vom Memcache-Server ausgeführt, sodass sie auch bei parallelen Zugriffen korrekte Ergebnisse liefert – ein manuelles Lesen, Verringern und Zurückschreiben ist daher nicht notwendig und sollte vermieden werden.