Kuonen SQL

Handbuch

Syntax, Datentypen, Funktionen und Fehlernummern je Abfragesprache — jeder Abschnitt mit einem Beispiel aus dem Beispielkatalog und, wo die Sprache einen eigenen Sprachmeilenstein der Roadmap hat, dem Stand jedes einzelnen Punktes daraus.

Über Port 6379 spricht KuonenSQL reines RESP (Redis Serialization Protocol) — direkt auf derselben Ablage, die über TDS/MariaDB als Tabellen im Schema redis sichtbar ist. Ein Schlüssel, den eine Anwendung mit SET ablegt, ist im selben Augenblick eine Zeile, die sich mit einem gewöhnlichen SELECT lesen lässt.

Punkt Beschreibung Stand
R13.1 Der Befehlssatz, vollständig Was heute fehlt: die **sortierten Mengen** (`ZADD`, `ZRANGE`, `ZRANGEBYSCORE`, `ZRANK`, `ZINCRBY`, `ZREM`, `ZCARD`, `ZCOUNT`), die **Bitfelder** … ✅
R13.2 Sitzung, Stapel und Benachrichtigung `MULTI`/`EXEC`/`DISCARD`/`WATCH` als optimistische Klammer, **Pipelining** (mehrere Befehle in einem Paket, Antworten in derselben Reihenfolge) … ✅
R13.3 Dieselbe Ablage, zwei Sichten Jeder Redis-Schlüssel erscheint im Schema `redis` als Zeile: `redis.schluessel` (Name, Art, Ablaufzeit, Grösse), `redis.texte`, `redis.hashes` … ✅
R13.4 Auf Geschwindigkeit gebaut Der Redis-Weg bekommt eine eigene, kurze Bahn: RESP ohne Zwischenobjekte aus dem Puffer lesen (`ReadOnlySequence<byte>` statt Zeichenketten), die … ✅
R13.5 Der Nachweis, dass es den SQL-Server nicht bremst Eine Messreihe, die beides zugleich laufen lässt: SQL-Last allein, Redis-Last allein, beide zusammen. ✅
R13.6 Dauerhaftigkeit, wenn gewünscht Redis-Daten liegen bewusst nur im Hauptspeicher. ✅

Beispiele

Zeichenketten

SET, GET und INCR

Zeichenketten sind der Grundtyp: SET/GET speichern und lesen, INCR zählt eine Zahl-Zeichenkette hoch.

SET pruefstand:demo:string:gruss "Hallo Welt"
GET pruefstand:demo:string:gruss
INCR pruefstand:demo:string:zaehler
INCR pruefstand:demo:string:zaehler
Erwartetes Ergebnis
Befehl | Antwort
SET pruefstand:demo:string:gruss "Hallo Welt" | OK
GET pruefstand:demo:string:gruss | Hallo Welt
INCR pruefstand:demo:string:zaehler | 1
INCR pruefstand:demo:string:zaehler | 2

Hashes

HSET, HGET und HGETALL

Ein Hash hält mehrere Feld/Wert-Paare unter einem Schlüssel.

HSET pruefstand:demo:hash:kunde name "Anna" ort "Bern"
HGET pruefstand:demo:hash:kunde name
HGETALL pruefstand:demo:hash:kunde
Erwartetes Ergebnis
Befehl | Antwort
HSET pruefstand:demo:hash:kunde name "Anna" ort "Bern" | 2
HGET pruefstand:demo:hash:kunde name | Anna
HGETALL pruefstand:demo:hash:kunde | [name, Anna, ort, Bern]

Listen

RPUSH, LRANGE und LPOP

Eine Liste hält Werte in Einfügereihenfolge; RPUSH hängt hinten an, LPOP nimmt vorne weg.

RPUSH pruefstand:demo:liste:aufgaben "Kochen" "Putzen" "Lesen"
LRANGE pruefstand:demo:liste:aufgaben 0 -1
LPOP pruefstand:demo:liste:aufgaben
Erwartetes Ergebnis
Befehl | Antwort
RPUSH pruefstand:demo:liste:aufgaben "Kochen" "Putzen" "Lesen" | 3
LRANGE pruefstand:demo:liste:aufgaben 0 -1 | [Kochen, Putzen, Lesen]
LPOP pruefstand:demo:liste:aufgaben | Kochen

Mengen

SADD, SCARD und SISMEMBER

Eine Menge hält jeden Wert höchstens einmal — ein zweites SADD desselben Werts zählt nicht mit.

SADD pruefstand:demo:menge:farben "rot" "gruen" "blau" "rot"
SCARD pruefstand:demo:menge:farben
SISMEMBER pruefstand:demo:menge:farben "gruen"
Erwartetes Ergebnis
Befehl | Antwort
SADD pruefstand:demo:menge:farben "rot" "gruen" "blau" "rot" | 3
SCARD pruefstand:demo:menge:farben | 3
SISMEMBER pruefstand:demo:menge:farben "gruen" | 1

Sortierte Mengen

ZADD, ZRANGE WITHSCORES und ZSCORE

Eine sortierte Menge hält jeden Wert mit einer Zahl (dem Rang); ZRANGE liest sie nach Rang aufsteigend.

ZADD pruefstand:demo:zmenge:rangliste 10 "Anna" 25 "Beat" 15 "Carla"
ZRANGE pruefstand:demo:zmenge:rangliste 0 -1 WITHSCORES
ZSCORE pruefstand:demo:zmenge:rangliste "Beat"
Erwartetes Ergebnis
Befehl | Antwort
ZADD pruefstand:demo:zmenge:rangliste 10 "Anna" 25 "Beat" 15 "Carla" | 3
ZRANGE pruefstand:demo:zmenge:rangliste 0 -1 WITHSCORES | [Anna, 10, Carla, 15, Beat, 25]
ZSCORE pruefstand:demo:zmenge:rangliste "Beat" | 25

Ablauf

EXPIRE, TTL und PERSIST

EXPIRE setzt eine Lebensdauer in Sekunden, TTL fragt sie ab, PERSIST nimmt sie wieder weg.

SET pruefstand:demo:ablauf:sitzung "aktiv"
EXPIRE pruefstand:demo:ablauf:sitzung 100
TTL pruefstand:demo:ablauf:sitzung
PERSIST pruefstand:demo:ablauf:sitzung
TTL pruefstand:demo:ablauf:sitzung
Erwartetes Ergebnis
Befehl | Antwort
SET pruefstand:demo:ablauf:sitzung "aktiv" | OK
EXPIRE pruefstand:demo:ablauf:sitzung 100 | 1
TTL pruefstand:demo:ablauf:sitzung | 100
PERSIST pruefstand:demo:ablauf:sitzung | 1
TTL pruefstand:demo:ablauf:sitzung | -1