Adventskalender 1. Dezember 2022 - Key-Value-Store

Smalltalk
Antworten
Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 00:02:21

Hiermit eröffne ich den diesjährigen Adventskalender mit einem Beitrag über den Key-Value-Store Redis. Das Logo hat optisch etwas von einem Adventskranz, von dem die erste Kerze bereits abgebrannt ist:

3844

Redis lagert jedoch keine Kerzen, sondern speichert Datenstrukturen, d.h. Daten unterschiedlicher Formen, was im Logo recht schön zum Ausdruck kommt:

3843

Vier Kerzen, vier Datentypen: Zwar kennt Redis noch mehr, aber diese vier werden wir heute betrachten:
  • String: Eine Zeichenkette, die aber auch als Zahl interpretiert werden kann.
  • List: Mehrere Einträge in einer verketteten(!) Liste.
  • Set: Mengen mit eindeutigen Elementen.
  • Hash: Mehrere Einträge als Schlüssel/Wert-Paare.
(Andere Datentypen habe ich bisher auch noch nicht verwendet.)

Setup

Bevor wir mit diesen Datentypen arbeiten können, müssen wir aber Redis zuerst einmal installieren und starten. Hierfür gibt es das Package Debianredis:

Code: Alles auswählen

# apt install -y redis 
# systemctl start redis-server.service
Neben dem Redis-Server wird auch redis-cli installiert, womit wir hier arbeiten werden:

Code: Alles auswählen

$ redis-cli
127.0.0.1:6379> 
Mit dem `PING`-Befehl lässt sich die Konnektivität überprüfen (der Prompt wird ab hier mit > abgekürzt):

Code: Alles auswählen

> PING
PONG
Hilfe zu einem bestimmten Befehl gibt es mit dem HELP-Befehl:

Code: Alles auswählen

> HELP PING
  PING [message]
  summary: Ping the server
  since: 1.0.0
  group: connection
Es gibt über 400 Befehle, die auf der Redis-Befehlsübersicht schön dokumentiert sind. Eine Manpage sucht man vergebens, redis-cli verfügt aber über ein --help-Flag.

Einfache Werte

Redis kann man sich wie eine grosse Map vorstellen. Eine Map speichert Daten als Schlüssel/Wert-Paare und kann somit als Verallgemeinerung des Arrays gesehen werden. (Bei einem Array sind die Schlüssel Zahlen von 0 bis n-1, wobei n die Anzahl der Elemente ist; bei einer Map kann man beliebige Schlüssel verwenden.)

Speichern wir also einige Werte mit SET ab:

Code: Alles auswählen

> SET day 1
OK
> SET month December
OK
> SET year 2022
OK
Die Schlüssel können mit KEYS [wildcard] (ähnlich einem glob-Pattern) aufgelistet werden:

Code: Alles auswählen

> KEYS *
1) "year"
2) "month"
3) "day"
Die Werte erhält man mit GET zurück:

Code: Alles auswählen

> GET day
"1"
Zwar ist der Wert als String abgespeichert, der INCR-Befehl kann ihn aber zu einer Zahl umwandeln und um 1 erhöht wieder abspeichern:

Code: Alles auswählen

> INCR day
(integer) 2
> GET day
"2"
> GET month
"December"
Laut Redis wären wir also jetzt schon für ein weiteres Türchen bereit. Doch nicht so schnell, wir wollen noch Listen betrachten.

Listen

Eine Liste ist kein Array, sondern eine verkettete Liste. Darum ist der Zugriff auf ein Element eine Operation der Ordnung O(n), das Anhängen vorne und hinten erfolgt jedoch in konstanter Zeit, sprich O(1). Legen wir also eine todo-Liste an:

Code: Alles auswählen

> LPUSH todo work eat sleep
(integer) 3
Wir erhalten sogleich die Anzahl erstellter Listenelemente zurück. Auf die Elemente einer Liste kann mit dem LRANGE-Befehl zugegriffen werden, indem man einen Start- und einen End-Index (jeweils inklusive) definiert, wobei der Index bei 0 beginnt, und -1 für das letzte Element steht:

Code: Alles auswählen

> LRANGE todo 0 -1
1) "sleep"
2) "eat"
3) "work"
Betrachten wir die todo-Liste wie eine Queue, wo wir von links Aufgaben hineinschieben, und von rechts her erledigen. Eine Aufgabe haben wir jedoch vergessen, und diese muss priorisiert, d.h. per RPUSH am rechten Ende eingefügt werden!

Code: Alles auswählen

> RPUSH todo "Tuerchen oeffnen"
(integer) 4
> LINDEX todo 3
1) "Tuerchen oeffnen"
> LRANGE todo 0 -1
1) "sleep"
2) "eat"
3) "work"
4) "Tuerchen oeffnen"
Da der Eintrag ein Leerzeichen enthält, muss er mit Anführungs- und Schlusszeichen umgeben sein. Mit LINDEX können wir direkt auf ein Element zugreifen.

Nun wollen wir aber auch eine Liste mit bereits erledigten Aufgaben anlegen:

Code: Alles auswählen

> LPUSH done aufstehen
(integer) 1
> LRANGE done 0 -1
1) "aufstehen"
Da das Türchen nun auch schon geöffnet wäre, können wir diese Aufgabe aus der todo-Liste entfernen und der done-Liste hinzufügen. Damit uns hier nicht ein Schuft dazwischenfunkt, machen wir dafür eine Transaktion mit MULTI:

Code: Alles auswählen

> MULTI
> RPOP done
QUEUED
> DISCARD
OK
Das ging schief: Statt auf todo wurde hier RPOP auf done verwendet. Zum Glück kann man die Transaktion mit DISCARD rückgängig machen. Dieses mal aber richtig, und dann mit EXEC auch tatsächlich ausführen:

Code: Alles auswählen

> MULTI
> RPOP todo
QUEUED
> LPUSH done "Tuerchen oeffnen"
QUEUED
> EXEC
1) "Tuerchen oeffnen"
2) (integer) 2
Die beiden Ergebnisse erhalten wir erst ganz am Schluss. Das Ergebnis stimmt aber:

Code: Alles auswählen

> LRANGE todo 0 -1
1) "sleep"
2) "eat"
3) "work"
> LRANGE done 0 -1
1) "Tuerchen oeffnen"
2) "aufstehen"
Praktisch ist das nicht. Einfacher ginge es mit dem RPOPLPUSH-Befehl, der das letzte Element von der ersten Liste entfernt und der zweiten List als erstes Element hinzufügt:

Code: Alles auswählen

> RPOPLPUSH todo done
"work"
Dann wäre das mit der Arbeit ja für heute auch schon erledigt… Aber wir wollen noch Sets betrachten.

Sets

Ein Set ist eine Menge, d.h. eine Sammlung von Werten, in der jeder Wert eindeutig ist. Beschäftigen wir uns mit Zahlenreihen, genauer mit der 2er- und der 3er-Reihe. Mit SADD können wir einem Set Werte hinzufügen. Das Set wird bei Bedarf gleich erstellt:

Code: Alles auswählen

> SADD two-times-table 2 4 6 8 10 12 14 16 18 20
(integer) 10
> SADD three-times-table 3 6 9 12 15 18 21 24 27 30
(integer) 10
Die grundlegenden Mengenoperationen Schnittmenge, Vereinigungsmenge und Differenzmenge können mit den Befehlen SINTER, SUNION und SDIFF erstellt werden:

Code: Alles auswählen

> SUNION two-times-table three-times-table
 1) "2"
 2) "3"
 3) "4"
 4) "6"
 5) "8"
 6) "9"
 7) "10"
 8) "12"
 9) "14"
10) "15"
11) "16"
12) "18"
13) "20"
14) "21"
15) "24"
16) "27"
17) "30"
> SINTER two-times-table three-times-table
1) "6"
2) "12"
3) "18"
> SDIFF three-times-table two-times-table
1) "3"
2) "9"
3) "15"
4) "21"
5) "24"
6) "27"
7) "30"
Die drei Befehle gibt es auch mit dem Präfix STORE, womit man die Mengen auch gleich ablegen kann.

Der Hash-Datentyp passt auch noch gerade so knapp in dieses erste Türchen.

Hashes

Mit dem Hash können Werte mit Unterwerten abgespeichert werden. Im Gegensatz zu einer Liste speichert man damit eher heterogene Werte ab, z.B. Eigenschaften von Forenteilnehmern.

Mit HSET kann ein neuer hash erstellt werden; der Befehl erwartet paarweise Schlüssel/Wert-Paare als weitere Argumente:

Code: Alles auswählen

> HSET paedubucher posts 624 location Schweiz license GFDL
(integer) 3
Mit HGETALL können dann alle Schlüssel und Werte von einem Hash zurückgegeben werden:

Code: Alles auswählen

> HGETALL paedubucher
HGETALL paedubucher
1) "posts"
2) "624"
3) "location"
4) "Schweiz"
5) "license"
6) "GFDL"
Nun mag es so aussehen, dass hier einfach eine Ansammlung von Werten gespeichert wird. Wir haben es aber tatsächlich mit Schlüssel/Wert-Paaren zu tun, wie die HGET-Funktion das demonstriert:

Code: Alles auswählen

> HGET paedubucher posts
"624"
Unter dem Schlüssel posts verbirgt sich also eine Zahl, die wir aufgrund dieses Beitrags erhöhen wollen. Hierzu nehmen wir den HINCRBY-Befehl:

Code: Alles auswählen

> HINCRBY paedubucher posts 1
(integer) 625
Bonus: Export

Redis ist kein Datenfriedhof, sondern interagiert sehr gut mit der Aussenwelt. Neben zahlreichen Sprachbindungen gibt es auch die Möglichkeit, Daten im CSV- oder JSON-Format zu exportieren:

Code: Alles auswählen

$ redis-cli --csv HGETALL paedubucher
"posts","625","location","Schweiz","license","GFDL"

$ redis-cli --json HGETALL paedubucher
{"posts":"625","location":"Schweiz","license":"GFDL"}
Na, wie findet Ihr das? Habt Ihr schon eigene Erfahrungen mit Redis gemacht? Könnt Ihr das einsetzen? Wie konfiguriert Ihr Redis? Verwendet Ihr es als Cache, oder speichert er die Daten im RDB- oder AOF-Format persistent ab? Habt Ihr schon einmal die Lua-Integration verwendet, oder sonstige Sprachanbindungen? Verwendet Ihr Redis gar als Message Queue?

Video

Ein Türchen wurde auch sogleich auf YouTube aufgemacht.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von Meillo » 01.12.2022 09:08:35

Tada! das erste Tuerchen ist da. :THX:


Ich selber habe noch nie was mit Redis gemacht und frage mich gerade, wofuer ich das einsetzen koennte. Derzeit fehlt mir wohl noch die Denkstruktur dafuer. ;-) Folglich faende ich es gut, wenn wir ein paar Anwendungsbereiche sammeln koennten, welche Technologien an den Stellen ersetzt werden wuerden und was die Vorteile sind.

Technisch habe ich den Ausfuehrungen zur Verwendung folgen koennen, mir fehlt es nur an der Denkweise, wie und wofuer ich das in der Praxis einsetzen koennte.
Use ed once in a while!

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von Tintom » 01.12.2022 09:22:30

Ein toller Einstieg in den Adventskalender! Danke @paedubucher für die ausführliche Vorstellung.
Ich schließe mich Meillo an, denn
[...] mir fehlt es nur an der Denkweise, wie und wofuer ich das in der Praxis einsetzen koennte.
waren auch meine ersten Gedanken, die ich nach dem Lesen hatte.

Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 10:00:21

Ein Beispiel aus einem Hobbyprojekt: Ich crawle täglich gewisse Seiten und speichere eine bestimmte Art von Einträgen in einem Set ab. Pro Tag und Seite gibt es ein Set. Nun vergleiche ich das heutige Set mit dem gestrigen (SDIFF), um Änderungen feststellen zu können. Da ich alle Daten archiviere, kann ich die Änderungen auch über längere Zeitspannen beobachten. Natürlich kann man das auch händisch ausprogrammieren. Die Mengenoperationen in Redis dürften aber massiv schneller sein als vergleichbare Operationen in beispielsweise Python.

Ein anderes Beispiel: Für ein kleines Monitoring-System (Liveness Probe) speichere ich Endpunkte ab: Also u.a. URL, Frequenz des Zugriffs, HTTP-Methode, erwarteter Stauts-Code. Aktuell habe ich das in einer CSV-Datei konfiguriert. Das benötigt natürlich Dateisystemzugriff. Will man das Monitoring-System dezentralisieren (z.B. eine Instanz in Nordamerika, eine in Europa), kann man die Konfiguration in Redis ablegen und ist nicht mehr auf ein Dateisystem angewiesen. Ein Hash wäre hier der passende Datentyp.

Redis wird dann sinnvoll, wenn einzelne Textdateien zu umständlich werden, v.a. aufgrund der Menge (Anzahl Textdateien, Anzahl Einträge pro Textdatei).
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

TuxPeter
Beiträge: 1961
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von TuxPeter » 01.12.2022 10:22:50

Danke für den interessanter Beitrag!

Nachdem ich weitere Erläuterungen im Wikipedia https://de.wikipedia.org/wiki/Schl%C3%B ... -Datenbank gesucht habe, will es mir scheinen, dass hier so etwas wie die gute alte index-sequentielle Datenspeicherung in modernerem Gewandt vorliegt, verbessert mich, wenn ich falsch liege: Ein kurzer, intern immer sortiert vorliegender Key enthält einen direkten Link, z.B. eine logische Block-Adresse auf die irgendwo vorliegenden, letztlich beliebig strukturierten Daten. Dann mag es gut sein, sich ins Gedächtnis zu rufen, dass Daten ja letztlich nur durch die ihnen übergestülpten, ihnen selbst aber fremden Format-Anweisungen typisiert und somit interpretierbar werden.
Da wäre allerdings, entschuldigt die Plattheit, die Frage, ob nicht letztlich alle Datenbanksysteme genau nach diesem Muster funktionieren und sich eigentlich nur durch die bereitgestellten Zugriffsmethoden unterscheiden.
Aber ich bin kein Informatiker, habe nur tief im letzten Jahrtausend eine Kurzzeitdressur in Anwendungsprogrammierung genossen, alles andere reime ich mir auf eigenen Gefahr zusammen.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von Meillo » 01.12.2022 10:37:37

Also koennte ich mit Redis ``Verlaufsdatenspeicher'', die ich in Textdateien halte, ersetzen, insbesondere dann, wenn es viele Eintraege sind und diese eine Unterstruktur haben. Statt (heutzutage) also riesige JSON-Konstrukte in Textdateien zu speichern, zu lesen, zu ergaenzen, usw. koennte man diese in Redis ablegen. Man spart sich dann Locking, reduziert die Menge an Datentransfer und bekommt allerlei Operationen geschenkt. Richtig verstanden?

Nun zum Vergleich mit Relationalen Datenbanken, die man dafuer normalerweise ja verwenden wuerde. Ich vermute, dass der Unterschied in einer flexibleren Datenstruktur liegen koennte. In Relationalen Datenbanken ist die Datenstruktur (Tabellendefinition) ja recht fix und unflexibel. Lassen sich mit Redis heterogenere Daten ablegen oder warum und wann waere Redis geeigneter als Mariadb/Postgres/Sqlite?
Use ed once in a while!

Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 10:54:09

Meillo hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 10:37:37
Also koennte ich mit Redis ``Verlaufsdatenspeicher'', die ich in Textdateien halte, ersetzen, insbesondere dann, wenn es viele Eintraege sind und diese eine Unterstruktur haben. Statt (heutzutage) also riesige JSON-Konstrukte in Textdateien zu speichern, zu lesen, zu ergaenzen, usw. koennte man diese in Redis ablegen. Man spart sich dann Locking, reduziert die Menge an Datentransfer und bekommt allerlei Operationen geschenkt. Richtig verstanden?
Ja, das kann man durchaus so verwenden. Das schöne an Redis ist, dass ich abstrakte Datenstrukturen (Listen, Mengen, Hashes) direkt persistieren kann. Ich bin also sehr nahe an den Datenstrukturen, die ich in meinem Programmen auch verwende.
Meillo hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 10:37:37
Nun zum Vergleich mit Relationalen Datenbanken, die man dafuer normalerweise ja verwenden wuerde. Ich vermute, dass der Unterschied in einer flexibleren Datenstruktur liegen koennte. In Relationalen Datenbanken ist die Datenstruktur (Tabellendefinition) ja recht fix und unflexibel. Lassen sich mit Redis heterogenere Daten ablegen oder warum und wann waere Redis geeigneter als Mariadb/Postgres/Sqlite?
Es gibt im Buch Seven Databases in Seven Weeks, das auch Redis thematisiert, einen Comic. Dort sagt einer der Figuren so ketzerisch: "Da könnte man aber auch eine SQL-Datenbank mit zwei Spalten 'Key' und 'Value' nehmen." Redis hilft mir aber dabei, mit dem 'Value'-Teil umzugehen, indem es den als Datenstruktur interpretiert, nicht einfach als String. Mit einer SQL-Datenbank müsste ich das auf Anwendungsebene behandeln. (Zugegeben: PostgreSQL hat mittlerweile auch einen JSON-Datentyp.) Für den Value-Teil benötige ich kein Schema; ein abstrakter Datentyp (Liste, Hash, Set) genügt. Ich habe es also mit halbstrukturierten Daten zu tun.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von Meillo » 01.12.2022 11:05:25

paedubucher hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 10:54:09
Meillo hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 10:37:37
Nun zum Vergleich mit Relationalen Datenbanken, die man dafuer normalerweise ja verwenden wuerde. Ich vermute, dass der Unterschied in einer flexibleren Datenstruktur liegen koennte. In Relationalen Datenbanken ist die Datenstruktur (Tabellendefinition) ja recht fix und unflexibel. Lassen sich mit Redis heterogenere Daten ablegen oder warum und wann waere Redis geeigneter als Mariadb/Postgres/Sqlite?
Es gibt im Buch Seven Databases in Seven Weeks, das auch Redis thematisiert, einen Comic. Dort sagt einer der Figuren so ketzerisch: "Da könnte man aber auch eine SQL-Datenbank mit zwei Spalten 'Key' und 'Value' nehmen." Redis hilft mir aber dabei, mit dem 'Value'-Teil umzugehen, indem es den als Datenstruktur interpretiert, nicht einfach als String. Mit einer SQL-Datenbank müsste ich das auf Anwendungsebene behandeln. (Zugegeben: PostgreSQL hat mittlerweile auch einen JSON-Datentyp.) Für den Value-Teil benötige ich kein Schema; ein abstrakter Datentyp (Liste, Hash, Set) genügt. Ich habe es also mit halbstrukturierten Daten zu tun.
Dass eine String-Spalte, die dann JSON oder XML oder CSV enthaelt, nicht so der Hit ist, ist klar. Darauf hat der Comic ja abgezielt, aber ein Set liesse sich ja auch ueber mehrere Boolean-Spalten abbilden und Liste/Hash ueber eine Hilfstabelle (falls ihre Laengen variabel sind). Ist der Vorteil hier einfach, dass Redis da leichtgewichtiger ist und man weniger Handarbeit braucht, sondern direkt reinspeichern und rausholen kann, was man braucht und sowas wie einen Diff eines Hashes geschenkt bekommt, den man sonst von Hand programmieren muesste?
Use ed once in a while!

Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 11:38:36

Meillo hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 11:05:25
Dass eine String-Spalte, die dann JSON oder XML oder CSV enthaelt, nicht so der Hit ist, ist klar. Darauf hat der Comic ja abgezielt, aber ein Set liesse sich ja auch ueber mehrere Boolean-Spalten abbilden und Liste/Hash ueber eine Hilfstabelle (falls ihre Laengen variabel sind). Ist der Vorteil hier einfach, dass Redis da leichtgewichtiger ist und man weniger Handarbeit braucht, sondern direkt reinspeichern und rausholen kann, was man braucht und sowas wie einen Diff eines Hashes geschenkt bekommt, den man sonst von Hand programmieren muesste?
Das Set mit mehreren Boolean-Spalten müsste aber eine vorgegebene bzw. im Voraus bekannte Menge an möglichen Werten haben, die dann pro Zeile aktiv oder inaktiv sind.

Ich sehe den Vorteil schon im Bedienkomfort. Mit HSETNX kann ich beispielsweise einem bestimmten Hash einen Wert setzen, falls dieser noch nicht existiert. Das ist dann eine einzige Operation. Bei einer vergleichbaren SQL-Datenbank müsste ich den Eintrag mit SELECT laden, schauen, ob ein Wert da ist, und, falls nicht, den Wert setzen und mit UPDATE zurückschreiben. (Bei SQL kann man Standardwerte zwar auch nachträglich definieren, aber nur für alle Einträge einer Tabelle.) Wie gesagt spart man sich mit solchen Befehlen auch das Locking und hat die Transaktionssicherheit geschenkt. Darum auch das Beispiel mit der Transaktion und dem RPOPLPUSH zum Vergleich.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
mn77de
Beiträge: 155
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von mn77de » 01.12.2022 13:50:24

Sehr guter und ausführlicher Einstieg in den Adventskalender! :THX:
Mir fällt zwar gerade kein Anwendungsfall ein, aber "redis" ist auf alle Fälle eingemerkt. 8)
OpenSource! :THX:

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von uname » 01.12.2022 15:58:09

Ein wirklich toller Beitrag. Danke dafür.
Als Anwendungsfall für Redis kenne ich Nextcloud.

Redis und Nextcloud

Benutzeravatar
TRex
Moderator
Beiträge: 8068
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von TRex » 01.12.2022 17:59:57

Ich hab redis auch schon ein paar Male verwendet, um kurzlebige Daten zu speichern, die ich zwar noch nicht auf Platte speichern, aber für weitere Verarbeitung dennoch vorhalten wollte.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 19:23:43

Danke für die vielen Rückmeldungen!

Einen Anwendungsfall haben viele gerade nicht gefunden. Aber es ist gut, sich Redis mal zu merken. Sobald man einmal ein passendes Problem findet, hat man dann diese Waffe im Arsenal.

Ich befasse mich dann noch mit Installationsmöglichkeiten, da ich mal hierzu einige Container erneuern müsste.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
schorsch_76
Beiträge: 2542
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von schorsch_76 » 01.12.2022 19:34:31

Danke für den Beitrag!

Gibt es bei Redis auch sowas wie SQL Abfragen oder ist das dann nur in RDBMS aka Postgres, MySQL, MariaDB etc. möglich? Wie unterscheidet es sich vom Debianmemcached das ja auch ein (In-Memory) Key-Value Store ist?

Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 20:30:55

schorsch_76 hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 19:34:31
Danke für den Beitrag!

Gibt es bei Redis auch sowas wie SQL Abfragen oder ist das dann nur in RDBMS aka Postgres, MySQL, MariaDB etc. möglich? Wie unterscheidet es sich vom Debianmemcached das ja auch ein (In-Memory) Key-Value Store ist?
SQL-Befehle gibt es nicht, aber man kann mit Lua skripten, falls einem die 400+ Befehle von Redis nicht reichen.

Der Unterschied zu memcached ist meines Wissens, dass Redis die Daten persistiert und memcached nicht.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
TRex
Moderator
Beiträge: 8068
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von TRex » 01.12.2022 21:19:24

paedubucher hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 20:30:55
dass Redis die Daten persistiert
kann es, muss es aber nicht.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
paedubucher
Beiträge: 855
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Adventskalender 1. Dezember 2022 - Key-Value-Store

Beitrag von paedubucher » 01.12.2022 21:36:56

TRex hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 21:19:24
paedubucher hat geschrieben: ↑ zum Beitrag ↑
01.12.2022 20:30:55
dass Redis die Daten persistiert
kann es, muss es aber nicht.
Genau: Redis kann die Daten persistieren, memcached ist meines Wissens nicht dafür ausgelegt.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Antworten