Skip to content

Kapitel 8: Set-Befehle (Duplikatfreiheit)

In diesem Kapitel lernst du die wichtigsten Befehle für den Set-Datentyp in Redis.

8.1 Kernbefehle (unverzichtbar)

Elemente zu einem Set hinzufügen

bash
# Syntax
SADD schlüssel element1 [element2 ...]

# Beispiel
SADD tags "redis" "database" "cache"
# Ausgabe: (integer) 3 (3 Elemente hinzugefügt)

# Versuch, Duplikate hinzuzufügen
SADD tags "redis" "nosql"
# Ausgabe: (integer) 1 (nur 1 neues Element, "redis" war schon da)

Wichtig: Sets erlauben keine Duplikate! SADD ignoriert bereits vorhandene Elemente.

Alle Elemente eines Sets anzeigen

bash
# Syntax
SMEMBERS schlüssel

# Beispiel
SMEMBERS tags
# Ausgabe:
# 1) "redis"
# 2) "database"
# 3) "cache"
# 4) "nosql"

Hinweis: Sets sind ungeordnet - die Reihenfolge kann variieren!

Prüfen, ob ein Element in einem Set ist

bash
# Syntax
SISMEMBER schlüssel element

# Beispiel
SISMEMBER tags "redis"
# Ausgabe: (integer) 1 (ist im Set)

SISMEMBER tags "mysql"
# Ausgabe: (integer) 0 (ist nicht im Set)

Elemente aus einem Set entfernen

bash
# Syntax
SREM schlüssel element1 [element2 ...]

# Beispiel
SREM tags "cache"
# Ausgabe: (integer) 1 (1 Element entfernt)

SREM tags "redis" "nosql"
# Ausgabe: (integer) 2 (2 Elemente entfernt)

Anzahl der Elemente in einem Set abrufen

bash
# Syntax
SCARD schlüssel

# Beispiel
SCARD tags
# Ausgabe: (integer) 2 (2 Elemente im Set)

Zufällige Elemente aus einem Set abrufen

bash
# Ein zufälliges Element abrufen (ohne Entfernung)
SRANDMEMBER tags
# Ausgabe: z.B. "redis"

# Mehrere zufällige Elemente abrufen
SRANDMEMBER tags 2
# Ausgabe: 2 zufällige Elemente

# Ein zufälliges Element abrufen UND ENTFERNEN
SPOP tags
# Ausgabe: z.B. "database" (wurde aus dem Set entfernt)

Element von einem Set in ein anderes verschieben

bash
# Syntax
SMOVE quell_set ziel_set element

# Beispiel
SADD set1 "a" "b" "c"
SADD set2 "x" "y" "z"
SMOVE set1 set2 "b"
# "b" wird von set1 nach set2 verschoben

8.2 Mengenoperationen (Sets)

Schnittmenge (Intersection)

bash
# Syntax
SINTER set1 set2 [set3 ...]

# Beispiel
SADD set1 "a" "b" "c" "d"
SADD set2 "c" "d" "e" "f"
SINTER set1 set2
# Ausgabe:
# 1) "c"
# 2) "d"

Vereinigungsmenge (Union)

bash
# Syntax
SUNION set1 set2 [set3 ...]

# Beispiel
SUNION set1 set2
# Ausgabe:
# 1) "a"
# 2) "b"
# 3) "c"
# 4) "d"
# 5) "e"
# 6) "f"

Differenzmenge (Difference)

bash
# Syntax
SDIFF set1 set2 [set3 ...]

# Beispiel
SDIFF set1 set2
# Ausgabe: Elemente, die in set1 sind, aber nicht in set2
# 1) "a"
# 2) "b"

Erklärung: SDIFF set1 set2 = Elemente, die in set1 sind, aber nicht in set2.

Schnittmenge speichern

bash
# Syntax
SINTERSTORE ziel_set set1 set2 [set3 ...]

# Beispiel
SINTERSTORE result_set set1 set2
# Speichert die Schnittmenge in "result_set"

Vereinigungsmenge speichern

bash
# Syntax
SUNIONSTORE ziel_set set1 set2 [set3 ...]

# Beispiel
SUNIONSTORE result_set set1 set2

Differenzmenge speichern

bash
# Syntax
SDIFFSTORE ziel_set set1 set2 [set3 ...]

# Beispiel
SDIFFSTORE result_set set1 set2

8.3 Anwendungsszenarien: Praxisbeispiele

Szenario 1: Benutzertags (Duplikatentfernung)

bash
# Tags für einen Benutzer hinzufügen
SADD user:1:tags "sports" "tech" "music" "tech"
# "tech" wird nur einmal hinzugefügt (Duplikatentfernung)

# Alle Tags anzeigen
SMEMBERS user:1:tags

# Prüfen, ob ein Tag existiert
SISMEMBER user:1:tags "sports"

# Tag entfernen
SREM user:1:tags "music"

Szenario 2: Gemeinsame Freunde finden (Schnittmenge)

bash
# Freunde von Benutzer 1
SADD friends:1 "Anna" "Lisa" "Max" "Tom"

# Freunde von Benutzer 2
SADD friends:2 "Lisa" "Tom" "Peter" "Sara"

# Gemeinsame Freunde finden
SINTER friends:1 friends:2
# Ausgabe:
# 1) "Lisa"
# 2) "Tom"

Szenario 3: Besucher-Statistik (Duplikatfreie Zähler)

bash
# Eindeutige Besucher einer Seite zählen
SADD page:home:visitors "user:1"
SADD page:home:visitors "user:2"
SADD page:home:visitors "user:1"  # Duplikat, wird ignoriert

# Anzahl der eindeutigen Besucher
SCARD page:home:visitors
# Ausgabe: (integer) 2

Anfänger-Fehlerquellen

Fehler 1: Set-Elemente sind ungeordnet

bash
# Falsch: Erwartet eine bestimmte Reihenfolge
SADD colors "rot" "grün" "blau"
SMEMBERS colors
# Ausgabe könnte sein: "blau", "rot", "grün" (Reihenfolge variiert!)

# Richtig: Verstehe, dass Sets UNGEORDNET sind
# Wenn Reihenfolge wichtig ist, verwende List oder Sorted Set

Fehler 2: Schnittmenge/Vereinigungsmenge/Differenzmenge verwechselt

bash
# Falsch: Denkt, SDIFF set1 set2 = SDIFF set2 set1
SDIFF set1 set2
# Ausgabe: Elemente in set1, aber nicht in set2

SDIFF set2 set1
# Ausgabe: Elemente in set2, aber nicht in set1
# (kann ein unterschiedliches Ergebnis sein!)

Merke: SDIFF A BSDIFF B A!

Fehler 3: Duplikate werden ignoriert (kein Fehler)

bash
# Verhalten: SADD ignoriert Duplikate (kein Fehler!)
SADD tags "redis" "redis" "redis"
# Ausgabe: (integer) 1 (nur 1 Element wurde hinzugefügt)

SMEMBERS tags
# Ausgabe: 1) "redis"

Zusammenfassung

In diesem Kapitel haben wir:

  • ✅ Die wichtigsten Set-Befehle gemeistert (SADD, SMEMBERS, SISMEMBER, SREM, SCARD)
  • ✅ Mengenoperationen gelernt (SINTER, SUNION, SDIFF)
  • ✅ Praxisbeispiele für Tags und gemeinsame Freunde kennengelernt
  • ✅ Häufige Anfängerfehler verstanden

Im nächsten Kapitel werden wir die Sorted Set-Befehle lernen!

Übungen

  1. Praktische Übung:

    • Erstelle ein Set mit deinen 5 Lieblings-Hobbys
    • Versuche, ein Duplikat hinzuzufügen
    • Zeige alle Elemente an
    • Prüfe, ob ein bestimmtes Hobby im Set ist
    • Entferne ein Hobby
  2. Szenario-Übung:

    • Erstelle 2 Sets: "Freunde von Anna" und "Freunde von Max"
    • Finde gemeinsame Freunde (Schnittmenge)
    • Finde alle Freunde (Vereinigungsmenge)
    • Finde Freunde, die nur Anna hat (Differenzmenge)
  3. Besucher-Statistik-Übung:

    • Simuliere eine Seite mit eindeutigen Besuchern
    • Füge 10 Besucher hinzu (einige als Duplikate)
    • Zähle die eindeutigen Besucher

Frei für alle Anfänger