Redis
Redis ( Remote Dictionary Server)
Redis ist eine In-Memory-Datenbank mit einer einfachen Schlüssel-Werte-Datenstruktur (englisch key value store) und gehört zur Familie der NoSQL-Datenbanken (ist also nicht relational). Redis ist Open Source welches bedeutet, dass jeder zugriff drauf haben kann und ihn ebenso bearbeiten kann. Redis ist der verbreitetste Schlüssel-Werte-Speicher. Der große Vorteil von Redis ist, dass es schneller ist als relationale Datenbanken wie z. B. MySQL. Jedoch eignet er sich eher weniger für Komplexe Datenstrukturen.
Wer Wann und Warum ?
Der Entwickler von Redis ist Salvatore Sanfilippo im Jahr 2009 am 10 April. Das Redis-Projekt begann, als Salvatore Sanfilippo, der ursprüngliche Entwickler von Redis, versuchte, die Skalierbarkeit seines italienischen Startups zu verbessern, indem er einen Echtzeit- Weblog-Analysator entwickelte. Nachdem Probleme bei der Skalierung einiger Arten von Workloads mit herkömmlichen Datenbanksystemen entstanden, begann Sanfilippo 2009 mit der Entwicklung eines Prototyps einer ersten Proof-of-Concept-Version von Redis in der Programmiersprache Tcl . Später übersetzte Sanfilippo diesen Prototyp in die C-Sprache und implementierte den ersten Datentyp, die Liste. Nach einigen Wochen erfolgreicher interner Nutzung des Projekts entschied sich Sanfilippo, es als Open Source zu veröffentlichen.
Wie funktioniert Redis ?
Strings
Mit hilfe des set-Befehls kann man einen String erstellen.
127.0.0.1:6397> set foo "Hi"
127.0.0.1:6397> set value 1
Ruft man die Einträge foo und value nun mit get auf, werden die entsprechenden Werte angezeigt.
127.0.0.1:6397> get foo
"Hi"
127.0.0.1:6397> get value
"1"
Um einen Eintrag zu löschen, verwendet man den del-Befehl.
127.0.0.1:6397> del foo
(integer) 1
127.0.0.1:6397> get foo
(nil)
Wer nicht viele Einträge mit einer Extrazeile Code anlegen möchte, kann die erweiterte Funktion mset verwenden. Um die Werte von mehreren Einträgen gleichzeitig abzurufen, existiert parallel mget.
127.0.0.1:6397> mset foo1 "Hi1" foo2 "Hi2" foo3 "Hi3"
OK
127.0.0.1:6397> mget foo1 foo2 foo3
1) "Hi1"
2) "Hi2"
3) "Hi3"
Lists
Mit Redis kann man aber auch andere Datentypen verwenden. Bei der Arbeit mit der Datenbank sind z. B. Listen und Sets beliebt. Beides sind Ansammlungen von Werten. Während Sets allerdings unsortiert sind, sind die Werte in Listen durchnummeriert. Man kann in Listen Einträge hinzufügen, abfragen und wieder löschen.
127.0.0.1:6397> lpush mylist foo
(integer) 1
127.0.0.1:6397> lpush mylist Hi
(integer) 2
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "Hi"
127.0.0.1:6397> linsert mylist before "Hi" "test"
(integer) 3
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "test"
3) "Hi"
127.0.0.1:6397> lrem mylist 0 foo
(integer) 1
127.0.0.1:6397> lrange mylist 0 10
1) "test"
2) "Hi"
In diesem Beispiel haben wir zunächst zwei Elemente in eine Liste eingefügt (lpush) und uns diese anzeigen lassen. Bei dem Befehl lrange gibt man an, welcher Bereich (hier 0 bis 10) wiedergegeben werden soll, wobei man auch negative Zahlen verwenden kann. Anschließend haben wir mit linsert einen weiteren Wert vor einen bestehenden eingefügt (auch after wäre hier möglich) und damit die Nummerierung verändert. Der Befehl lrem kann Einträge mit einem spezifischen Wert aus der Liste löschen.
Sets
Für Sets kennt Redis andere Befehle, die aber ähnliche Ergebnisse liefern:
127.0.0.1:6397> sadd myset "foo"
(integer) 1
127.0.0.1:6397> sadd myset "Hi"
(integer) 1
127.0.0.1:6397> smembers myset
1) "Hi"
2) "foo"
127.0.0.1:6397> sismember myset "Hi"
(integer) 1
127.0.0.1:6397> srem myset "Hi"
(integer) 1
127.0.0.1:6397> smembers myset
1) "foo"
Mit sadd lassen sich auch mehrere Elemente gleichzeitig in das Set aufnehmen, wenn man diese im Kommando nacheinander einfügt. Um sich das Set anzeigen zu lassen, reicht der Befehl smembers und der Name des gewünschten Sets. Über den Befehl sismember kann man zudem nach einem bestimmten Eintrag suchen. Analog zur Liste kann man mit srem einzelne Einträge löschen.
Redis gibt Nutzern aber auch die Möglichkeit, Sets in einem sortierten Format zu verwenden.
127.0.0.1:6397> zadd mysortedset 1 "foo"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "Hi"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "fooHi"
(integer) 1
127.0.0.1:6397> zrange mysortedset 0 10
1) "foo"
2) "Hi"
3) "fooHi"
Zum Hinzufügen von Elementen verwendet man bei dieser Variante den Befehl zadd und einen Score. Während die Werte selbst nicht mehrfach auftreten können, darf man beim Score mehrfach die gleiche Zahl angeben. Der Score ist also keine direkte Nummerierung innerhalb des Sets, sondern eine Gewichtung. Alle Einträge mit dem Score 2 kommen nach den Elementen mit dem Score 1. Anzeigen lassen kann man sich alle oder nur ausgewählte Einträge mit zrange.
Quellen:https://en.wikipedia.org/wiki/Redis, https://www.ionos.de/digitalguide/hosting/hosting-technik/redis-tutorial/,