Valkey
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 25.04 Plucky Puffin
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Valkey 🇬🇧 ist eine „Key-Value Store“ Datenbank (oder kurz nur KV Store), ins Deutsche übersetzt Schlüssel-Werte-Datenbank. Hier werden die Daten immer in Form von Schlüssel-Werte-Paaren gespeichert. Man kann sich die Datenbank vereinfacht so vorstellen, dass darin nur eine Tabelle mit zwei Spalten existiert, nämlich einer Spalte für den Schlüssel und einer für den Wert.
Valkey kennt verschiedene Datentypen und kann entweder allein stehend oder als Cluster betrieben werden. Bei Valkey sind, wie bei anderen KV Stores auch, Schlüssel „alles“ und Werte „nichts“. D.h. alle Abfragen beziehen sich immer auf einen Schlüssel und liefern einen Wert zurück. Abfrage zu Werten wie „Zeige mir den Schlüssel zum Wert foobar“ gibt es nicht. Valkey ist im Vergleich zu anderen Datenbanksystemen, wie z.B. SQL-Datenbanken sehr schnell. Eine lokale Installation auf einem halbwegs aktuellen Laptop schafft in der Standardkonfiguration ca. 100.000 Abfragen pro Sekunde. Daher wird Valkey auch gerne als Caching Server und Messaging Queue genutzt.
Valkey wird unter der Obhut der Linux Foundation entwickelt. Das Projekt entstand als Fork von Redis 🇬🇧, nachdem das Redis Projekt von einer Open Source Lizenz auf eine restriktivere „source available“ Lizenz gewechselt ist 🇬🇧. Der Fork wurde auf Basis von Redis 7.2.4 vollzogen. Seitdem wird Valkey eigenständig weiter entwickelt.
Installation¶
aus den Paketquellen¶
Valkey ist ab Ubuntu 24.04 in den Paketquellen enthalten[1]:
valkey (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install valkey
Bei der Installation wird, sofern man das eigene System nicht umkonfiguriert hat, das Paket ruby-redis als empfohlene Abhängigkeit mit installiert. Wer nicht von Ruby aus auf Valkey zugreifen möchte, sollte bei der Paketinstallation die Option --no-install-recommends
mit angeben.
Bei der Installation wird auch die systemd Service Unit valkey-server.service angelegt und aktiviert. Über diese wird der Valkey Server beim Booten gestartet.
manuelle Installation¶
Hinweis!
Fremdsoftware kann das System gefährden.
Wer die aktuelle, stabile Version von Valkey nutzen oder mit einer anderen Konfiguration selbst kompilieren möchte, der geht wie folgt vor: Als erstes lädt man sich die aktuelle Version von der Downloadseite des Projekts 🇬🇧 herunter. Die Datei entpackt man dann[3], z.B. in das eigene Homeverzeichnis
Hinweis:
Es wird im folgenden davon ausgegangen, dass Valkey nach /home/BENUTZER/valkey-8.1.1
entpackt worden ist.
Man wechselt ins Verzeichnis valkey-8.1.1 und startet das Kompilieren[2]:
make
Nach dem Durchlauf des Compilers ist Valkey einsatzbereit, allerdings nicht systemweit installiert. Zum Testen oder lokalen Einsatz ist dies aber auch nicht notwendig. Zum manuellen Starten von Valkey wechselt man in das Verzeichnis scr und startet dort den Valkey-Server manuell:
./valkey-server
Hier man auch die interaktive Kommandozeile manuell starten:
./valkey-cli
Möchte man Valkey systemweit installieren, ist noch der folgende Befehl auszuführen[4][5]:
sudo make install
Der Server sowie die Hilfsprogramme wie valkey-cli
etc. werden dann nach /usr/local/bin installiert.
Zu beachten ist, dass bei der manuellen Installation weder eine systemd Service Unit noch eine Konfigurationsdatei angelegt wird. Eine Vorlage für eine passende Service Unit Datei ist im Unterverzeichnis utils zu finden. Die Vorlage für die Konfigurationsdatei valkey.conf ist auf der oberen Ebenen im entpackten Verzeichnis zu finden.
Weitere, ausführliche Hinweise zum Kompilieren findet man in der Datei README.md, die man auf der oberen Ebenen im entpackten Verzeichnis findet.
Benutzung¶
Im folgenden wird eine kurze Übersicht über die grundlegende Nutzung und die verschiedenen Möglichkeiten von Valkey gegeben. Eine vollständige Übersicht zu allen Themen und Möglichkeiten ist in der ausführlichen Dokumentation 🇬🇧 zu finden.
Für das kurze Praxisbeispiel im Abschnitt Valkey Kommandozeile wird davon ausgegangen, dass ein Valkey Server auf dem Rechner lokal läuft.
Datentypen¶
Valkey kennt zehn verschiedene Datentypen, die in der folgenden Tabelle kurz erklärt werden. Ausführliche Information findet man in der Valkey Dokumentation zu Datentypen 🇬🇧.
Datentyp | Beschreibung |
String | Eine beliebige Zeichenfolge (z.B. Text) |
List | Entspricht einem Array, die Elemente (= Strings) werden über einen positiven, ganzzahligen, null-basierten Index angesprochen (d.h. das erste Element der Liste hat den Index 0, das zweite 1 usw.). |
Hash | Entspricht einem assoziativem Array, die Elemente bestehen hier wiederum aus Schlüssel-Werten Paaren. |
Set | Entspricht „List", außer dass – im Gegensatz zu List – Elemente nur genau einmal vorkommen dürfen. |
Sorted Set | Entspricht einem Set, nur dass zusätzlich der Index des Elements explizit mit angegeben wird. |
Stream | Streams in Redis sind eine Art Datenstrom in Form eines Logs, an den nur Daten angehangen werden können. D.h. bestehende Daten können nicht geändert oder gelöscht werden. |
Geospatial Index | Varianten des Sortes Sets, bei dem Geodaten in der Form LATITUDE, LONGITUDE, ORT angegeben werden. LATITUDE und LONGITUDE müssen in Dezimalgrad angegeben werden. Damit ist es z.B. möglich Abstände zwischen zwei Orten zu berechnen oder eine Umkreissuche durchzuführen. |
Bitmap | Eine spezielle Version des Datentyps „String“, bei dem nur Nullen und Einsen (Bits) gespeichert werden |
Bitfield | Dienen zum Speichern von Integer Werten, die Werte als binäre Strings gespeichert. Zugriffe erfolgen durch atomare Operationen, wodurch sich Bitfields sehr gut für Zähler nutzen lassen. |
HyperLogLog | probabilistische Datenstruktur, mit der sich die Kardinalität einer Datenmenge sehr speichereffizient bestimmen lässt |
Valkey Kommandozeile¶
Mit dem Befehl[4]
valkey-cli
startet man eine interaktive Kommandozeile zur Interaktion mit der Datenbank. Gibt man keine weiteren Parameter beim Aufruf an, wird als IP-Adresse des Servers 127.0.0.1
(localhost) und Port 6379 (der Default-Port von Valkey) angenommen, sowie die Datenbank mit dem Index 0 genutzt.
Im folgenden ein Beispiel zur Interaktion mit der Datenbank:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 127.0.0.1:6379> set greeting "Hallo Wetl!" OK 127.0.0.1:6379> get greeting "Hallo Wetl!" 127.0.0.1:6379> LPUSH listExample "focal" "jammy" "noble" (integer) 3 127.0.0.1:6379> LLEN listExample (integer) 3 127.0.0.1:6379> LPUSH listExample "bionic" (integer) 4 127.0.0.1:6379> LRANGE listExample 0 -1 1) "bionic" 2) "noble" 3) "jammy" 4) "focal" 127.0.0.1:6379> HSET releases "jammy" "22.04" "noble" "24.04" (integer) 2 127.0.0.1:6379> HGETALL releases 1) "jammy" 2) "22.04" 3) "noble" 4) "24.04" 127.0.0.1:6379> HGET releases jammy "22.04" 127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> SET greeting "Hallo Ubuntu" OK 127.0.0.1:6379[1]> GET greeting "Hallo Ubuntu" 127.0.0.1:6379[1]> SELECT 0 OK 127.0.0.1:6379> GET greeting "Hallo Wetl!" 127.0.0.1:6379> EXIT |
Dabei passiert folgendes:
Alles erstes wird der Schlüssel
greeting
mit dem StringHallo Welt
als Wert angelegt (SET
) und abgefragt (GET
).Dann wird eine Liste mit dem Schlüssel
listExample
angelegt (LPUSH
), die drei Werte enthält. Es wird die Länge der Liste abgefragt (LLEN
), ein weiterer Wert an den Anfang der Liste eingefügt (LPUSH
) und die Liste komplett ausgegeben (LRANGE
).Danach wird der Hash
releases
mit zwei Schlüssel-Werte Paaren angelegt (HSET
), alle Schlüssel-Werte Paare des Hashs angezeigt (HGETALL
) und der Wert vonjammy
aus dem Hashreleases
gezielt abgefragt.Zum Schluss wird die Datenbank auf Datenbank 1 gewechselt (
SELECT 1
), darin ein Schlüssel mit einem String-Wert angelegt und abgefragt. Danach wird wieder zurück zur Datenbank 0 gewechselt (SELECT 0
).Mit
EXIT
verlässt man die interaktive Kommandozeile.
Die komplette Dokumentation zu valkey-cli
wie Optionen, nicht-interaktive Nutzung etc. findet man in der Dokumentation 🇬🇧.
Publish / Subscribe¶
Valkey ist auch ein Publish-Subscribe Server. Hier können Nachrichten an Kanäle gesendet werden („Publish“), auf dem die Empfänger dann lauschen können („subscribe“). Der Sender weiß nichts über die Empfänger, dass heißt es gibt keine Empfangsbestätigung oder ähnliches. Für den Empfänger ist sichergestellt, dass Nachrichten in der Reihenfolge empfangen werden, in der sie versendet wurden. Details und Beispiele zur Nutzung gibt es in der Dokumentation 🇬🇧.
Lua Skripting¶
Valkey unterstützt serverseitig das Ausführen von Lua-Skripten. Damit können z.B. Daten aus der Datenbank auf dem Server ver- / bearbeitet werden, bevor sie als Ergebnis zurück geliefert werden. Weitere Informationen sind in der Dokumentation 🇬🇧 zu finden.
Benchmark¶
Sowohl bei der Installation aus den Paketquellen als auch der manuellen Installation wird das Programm valkey-benchmark
mit installiert, mit dessen Hilfe man die Performance der Installation auf der eigenen Hardware testen kann. Das Programm wird einfach über
valkey-benchmark
gestartet. Der Benchmark kennt etliche Optionen, die man sich über die Option -h
beim Aufruf des Programms anzeigen lassen kann.
Konfiguration¶
Die komplette Konfiguration ist standardmäßig in der Datei /etc/valkey/valkey.conf abgelegt. Die Konfiguration wird beim Starten des Server automatisch gelesen, wenn man nicht eine andere Konfigurationsdatei angibt.
Die Datei ist sehr ausführlich kommentiert, außerdem sind in der Dokumentation die Seiten
valkey.conf 🇬🇧 – allgemeine Einführung in die Konfigurationsdatei
Persistance 🇬🇧 – Erklärung zu den Optionen der Datenpersistenz
Replikation 🇬🇧 – Erklärung, wie man Valkey für die „Leader-Follower“ Replikation konfiguriert
als Einstiegspunkt empfehlenswert.
Clusterbetrieb¶
In der Standardeinstellung läuft der Valkey-Server als einzelne Instanz. Valkey ist aber auch clusterfähig. Einen ausführlichen Einstieg findet man im Cluster-Tutorial 🇬🇧 der Dokumentation.
Deinstallation¶
Leider hat Valkey keine Deinstallationsroutine zum Entfernen der manuellen Installation. Dies kann man aber recht einfach von Hand erledigen. Man wechselt ins Verzeichnis /usr/local/bin und führt dort den Befehl [4][5]:
sudo rm valkey-*
aus. Anschließend schaut man in den Verzeichnissen /var/log und /var/lib, ob dort eventuell Logdateien und Datenbankdateien (Dateiendung .rdb) von Valkey vorhanden sind und löscht diese ebenfalls manuell. Dazu sind auch Root-Rechte notwendig. Hat man selber eine systemd Service Unit zum automatischen Starten des Server angelegt, muss man die Unit deaktivieren und entfernen. Hat man eine Konfigurationsdatei angelegt, entfernt man diese ebenfalls.
Hat man Valkey nur mit make
kompiliert, aber nicht mit sudo make install
installiert, reicht es, das Verzeichnis, in dem Valkey entpackt wurde, inklusive alle Unterverzeichnisse zu löschen.
Links¶
Homepage 🇬🇧
Startseite 🇬🇧 der Dokumentation
Github Repository von Valkey
Übersicht 🇬🇧 über Bibliotheken für verschiedene Programmiersprachen, um auf Valkey zuzugreifen