Database Reference
In-Depth Information
LREM löscht passende Werte unter dem angegebenen Schlüssel. Sie müssen
auch eine Zahl angeben, damit der Befehl weiß, wie viele Treffer er löschen
soll. Setzt man den Wert (so wie wir das hier tun) auf 0, werden alle entfernt:
redis 127.0.0.1:6379> LREM eric:wishlist 0 gog
Hat der Zähler einen Wert größer 0, wird die entsprechende Anzahl von Tref-
fern gelöscht. Ein negativer Wert entfernt die entsprechende Zahl von Tref-
fern vom Ende (der rechten Seite) gelöscht.
Um jeden Wert in der Reihenfolge zu entfernen und abzurufen (wie in einer
Queue), können wir sie mit einer Pop-Operation von der linken Seite der Liste
(dem Kopf) entfernen.
redis 127.0.0.1:6379> LPOP eric:wishlist
"7wks"
Soll er als Stack fungieren, nachdem Sie mit RPUSH Werte abgelegt haben,
würden Sie sie mit RPOP wieder vom Ende der Liste entfernen. All diese Ope-
rationen werden in einer konstanten Zeit ausgeführt.
Für die obige Kombination von Befehlen können Sie mit LPUSH und RPOP den
gleichen Effekt erzielen (eine Queue) bzw. mit LPUSH und LPOP einen Stack
nachahmen.
Nehmen wir an, wir wollen Werte aus unserer Wunschliste in eine andere
Liste besuchter Sites verschieben. Um diese Verschiebung atomisch durch-
zuführen, könnten wir die Pop- und Push-Operationen in einen Multiblock
packen. Bei Ruby würde das etwa wie folgt aussehen (Sie können hier nicht
die Kommandozeile nutzen, weil die mit Pop abgerufenen Werte gesichert
werden müssen, weshalb wir das redis-rb -Gem genutzt haben):
redis.multi do
site = redis.rpop( 'eric:wishlist' )
redis.lpush( 'eric:visited' , site)
end
Doch Redis bietet auch einen einzelnen Befehl, der Werte vom Ende einer
Liste nimmt und an den Anfang einer anderen Liste stellt. Dieser Befehl heißt
RPOPLPUSH (Pop rechts, Push links).
redis 127.0.0.1:6379> RPOPLPUSH eric:wishlist eric:visited
"prag"
Wenn Sie sich nun die wishlist ansehen, ist prag verschwunden und liegt nun
in visited . Das ist ein nützlicher Mechanismus zum Queuing von Befehlen.
Search WWH ::




Custom Search