Login
Newsletter
Werbung

Mo, 22. Oktober 2012, 15:00

Redis – Suchen und Sortieren

Im Artikel Redis – Mehr als ein Key-Value-Store wurde das Key-Value Store Redis ausführlich vorgestellt. Beschrieben wurden unter anderem die Installation und der Betrieb eines Redis-Datenbankservers sowie die fünf verschiedenen Datentypen. Redis kann aber noch mehr – wie z.B. das Suchen nach Schlüsseln und das Sortieren von Ergebnissen.

Vorbereitung

Es wird für diesen Artikel davon ausgegangen, dass der Redis-Server bereits einsatzbereit ist und läuft. Wie in dem eingangs erwähnten Artikel werden auch in diesem Artikel alle Befehle für die Redis-Kommandozeile abgesetzt.

Zuerst wird die Datenbank mit ein paar Werten gefüllt, um eine Grundlage für die späteren Beispiele zu haben. Als erstes werden zwei Listen angelegt:

redis 127.0.0.1:6379> LPUSH nummern 10 7 8 1
(integer) 4
redis 127.0.0.1:6379> LPUSH worte foo bar spam egg
(integer) 4

Dann vier Hashes:

redis 127.0.0.1:6379> HMSET audio:Banshee platform Linux description "In Mono programmierter Audioplayer..."
OK
redis 127.0.0.1:6379> HMSET audio:Rhythmbox platfrom Linus description "Standardplayer des GNOME Desktops..."
OK
redis 127.0.0.1:6379> HMSET audio:Amarok platfrom Linux description "Beliebter Player für KDE..."
OK
redis 127.0.0.1:6379> HMSET audio:Winamp platform Windows description "Verbreiteter Audioplayer unter Windows..."
OK

Und zum Schluss noch drei Sets:

redis 127.0.0.1:6379> SADD audioplayer:Linux Banshee Rhythmbox Amarok
(integer) 3
redis 127.0.0.1:6379> SADD audioplayer:Windows Winamp
(integer) 1
redis 127.0.0.1:6379> SADD jochen:likes Banshee Rhythmbox Winamp
(integer) 1

Diese neun Schlüssel-Werte-Paare werden im Folgenden gesucht, abgefragt, sortiert und gefiltert.

Schlüssel suchen

Schlüssel sind in Redis alles, dies wurde schon im oben erwähnten Artikel ausführlich besprochen. Folgerichtig stellt die Datenbank mit dem KEYS-Kommando auch einen Befehl bereit, mit dem sich nach Schlüsseln suchen lässt, z.B.:

redis 127.0.0.1:6379> KEYS audio:Banshee
1) "audio:Banshee"
redis 127.0.0.1:6379> KEYS audio:Mediaplayer
(empty list or set)

Wobei die bloße Suche nach kompletten Schlüsseln besser mit Hilfe des EXISTS-Befehls erfolgt:

redis 127.0.0.1:6379> EXISTS audio:Mediaplayer
(integer) 0

Der Vorteil von KEYS ist, dass sich hier in die Suche auch Platzhalter wie *, ? und [...] einbauen lassen. Mit dem folgenden Befehl lassen sich alle Schlüssel finden, die mit audio: beginnen:

redis 127.0.0.1:6379> KEYS audio:*
1) "audio:Amarok"
2) "audio:Winamp"
3) "audio:Rhythmbox"
4) "audio:Banshee"

Alle Schlüssel suchen, die mit audio beginnen und auf x enden:

redis 127.0.0.1:6379> KEYS audio*x
1) "audio:Rhythmbox"
2) "audioplayer:Linux"

Das folgende Beispiel findet alle Schlüssel, die mit audio: beginnen und ein a im Schlüsselnamen haben:

redis 127.0.0.1:6379> KEYS audio:*a*
1) "audio:Amarok"
2) "audio:Winamp"
3) "audio:Banshee"

Analog kann man auch mit dem Platzhalter ? suchen, wobei das Fragezeichen genau ein beliebiges Zeichen darstellt.

Ein Suchbefehl wie z.B. KEYS audio:am[ao]rok würde – wenn vorhanden – die Schlüssel amarok und amorok finden, nicht aber amirok.

Der KEYS-Befehl mag zwar für manche Anwendungszwecke praktisch sein, aber die Entwickler raten von Einsatz in produktiv laufenden Datenbanken ab. Der Grund hierfür ist einleuchtend: Die Ausführungsgeschwindigkeit des Befehls sinkt linear mit der Anzahl der Schlüssel, da alle Schlüssel sequentiell nacheinander durchlaufen werden. Dies spielt hier in diesem Beispiel mit neun Schlüsseln sicherlich keine Rolle, in Datenbank mit mehreren Hundertausenden oder Millionen von Schlüsseln soll die »Bremswirkung« von KEYS aber deutlich spürbar sein.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung