Was ist der Zweck von Doppelpunkten in Redis-Schlüsseln?

76

Ich lerne, wie man Redis für ein Projekt von mir benutzt. Eine Sache, die ich nicht im Kopf habe, ist, wofür genau die Doppelpunkte in den Namen der Schlüssel verwendet werden.

Ich habe Schlüsselnamen wie diese gesehen:

users:bob
color:blue
item:bag

Trennt der Doppelpunkt Schlüssel in Kategorien und beschleunigt das Auffinden der Schlüssel? Wenn ja, können Sie beim Benennen von Schlüsseln mehrere Doppelpunkte verwenden, um sie in Unterkategorien zu unterteilen? Haben sie schließlich etwas mit der Definition verschiedener Datenbanken innerhalb des Redis-Servers zu tun?

Ich habe die Dokumentation gelesen und zahlreiche Google-Suchanfragen durchgeführt, aber seltsamerweise kann ich nichts finden, was darüber spricht.

Ryan
quelle

Antworten:

95

Die Doppelpunkte wurden in früheren Redis-Versionen als Konzept zum Speichern von Daten mit Namespace verwendet. In früheren Versionen unterstützte redis nur Zeichenfolgen. Wenn Sie die E-Mail und das Alter von 'bob' speichern wollten, mussten Sie alles als Zeichenfolge speichern. Daher wurden Doppelpunkte verwendet:

SET user:bob:email [email protected]
SET user:bob:age 31

Sie hatten keine besonderen Handhabungs- oder Leistungsmerkmale in Redis. Der einzige Zweck bestand darin, die Daten mit einem Namespace zu versehen, um sie wieder zu finden. Heutzutage können Sie Hashes verwenden, um die meisten Doppelpunkte zu speichern:

 HSET user:bob email [email protected]
 HSET user:bob age 31

Sie müssen den Hash nicht "user: bob" nennen, wir könnten ihn "bob" nennen, aber wenn wir ihn mit dem Benutzerpräfix benennen, wissen wir sofort, welche Informationen dieser Hash haben sollte / könnte.

Tobias P.
quelle
4
Ich frage mich, warum :gewählt wurde, wenn dies .in verschiedenen Sprachen häufiger vorkommt.
CivFan
3
Vielleicht, um sich genau von dem Punktoperator zu unterscheiden, der in den meisten Sprachen für den Objektzugriff verwendet wird
Tobias P.
40

Doppelpunkte sind eine Möglichkeit, die Schlüssel zu strukturieren. Sie werden von Redis in keiner Weise interpretiert. Sie können auch ein beliebiges anderes oder gar kein Trennzeichen verwenden. Ich persönlich bevorzuge /, wodurch meine Schlüssel wie Dateisystempfade aussehen. Sie haben keinen Einfluss auf die Leistung, aber Sie sollten sie nicht übermäßig lange machen, da redis alle Schlüssel im Speicher behalten muss.

Eine gute Schlüsselstruktur ist wichtig, um die Leistung des Sortierbefehls zu nutzen, der die Antworten von redis auf den SQL-Join darstellt.

GET user:bob:color   -> 'blue'
GET user:alice:color -> 'red'

SMEMBERS user:peter:friends -> alice, bob

SORT user:peter:friends BY NOSORT GET user:*:color   -> 'blue', 'red'

Sie können sehen, dass die Schlüsselstruktur es SORT ermöglicht, die Farben des Benutzers durch Verweisen auf die strukturierten Schlüssel nachzuschlagen.

Fabian Jakobs
quelle
1
Die Verwendung von / ist ein großartiger Vorschlag!
Saurabh Hirani
5
Als ich mich an Redis versuchte, stellte ich fest, dass UI-Tools wie redis Commander ( github.com/joeferner/redis-commander ) eine bessere Visualisierung zeigen, wenn Tasten eher mit einem Doppelpunkt als mit einem Schrägstrich strukturiert sind. So meine Stimme für Doppelpunkt für seine historische Bedeutung.
Pavan Kumar