Was ist die normale Namenskonvention für Schlüssel in Redis? Ich habe Werte gesehen, die durch Folgendes getrennt sind: Ich bin mir jedoch nicht sicher, was die normale Konvention ist oder warum.
Ja, das Doppelpunktzeichen :
ist eine Konvention beim Benennen von Schlüsseln. In diesem Tutorial auf der redis-Website heißt es: Versuchen Sie, sich an ein Schema zu halten. Zum Beispiel kann "Objekttyp: ID: Feld" eine nette Idee sein, wie in "Benutzer: 1000: Passwort". Ich verwende gerne Punkte für Felder mit mehreren Wörtern, wie in "comment: 1234: reply.to".
Können Sie nur den Anfang des Schlüssels abfragen, um alle Benutzer zurückzugeben?
Wenn Sie so etwas wie die direkte Abfrage aller Schlüssel meinen, die damit beginnt, user:
gibt es dafür einen Schlüsselbefehl . Dieser Befehl sollte jedoch nur zu Debugging-Zwecken verwendet werden, da er O (N) ist, da er alle in der Datenbank gespeicherten Schlüssel durchsucht.
Eine geeignetere Lösung für dieses Problem besteht darin, einen dedizierten Schlüssel zu erstellen users
, der alle Benutzerschlüssel speichert, z. B. in einer Liste oder einer festgelegten Datenstruktur.
scan
ist keine Option @EranH., es ist die beste Vorgehensweise, Schlüssel zu iterieren.scan
wird verwendet, um eine Sammlung von Elementen schrittweise zu durchlaufen.$redis->delete($redis->keys('user:password:*'));
Wir verwenden einen Doppelpunkt (:) als Namespace-Trennzeichen und einen Hash (#) für ID-Teile von Schlüsseln, z.
quelle
Eine Konvention scheint Doppelpunkt (:) zu sein, aber ich bin ein Webentwickler, daher bevorzuge ich persönlich einen Schrägstrich (/) für das Trennzeichen. Schrägstrich ist bereits ein so wichtiges Trennzeichen innerhalb von URLs, die als Uniform Resource Locators gedacht sind, also als Schlüssel für Ressourcen. Warum mit Doppelpunkt (:) einen anderen Ansatz wählen? Hilft es etwas?
Betrachten Sie dieses Beispiel:
Wir haben eine RESTful API für Spielzeugobjekte. Es gibt eine:
Wo haben wir es aufbewahrt? Wir verwenden Redis und Schrägstriche, damit der Schlüssel offensichtlich ist:
Dies ist der einzigartige Schlüssel für das Spielzeug. Der Schlüssel kann jetzt auch clientseitig verwendet werden:
Ein Benutzer fordert ein Objekt mit Schlüssel an
toy/666
. Wie bekomme ich es von Redis? Ein Beispiel für Node.js:Es ist nicht erforderlich, Schrägstriche in Doppelpunkte umzuwandeln und umgekehrt. Praktisch, meinst du nicht?
Hinweis: Stellen Sie immer sicher, dass der Benutzer nur auf die von Ihnen beabsichtigten Dinge zugreifen kann. Der oben beschriebene rohe URL-zu-Schlüssel-Ansatz kann ebenfalls abgerufen
user/1/password
werden, wie von Kommentatoren festgestellt. Dies sollte kein Problem sein, wenn Sie Redis als öffentlichen schreibgeschützten Cache verwenden.quelle
curl http://example.com/api/user/1/password
oder ähnliches. (Sag es einfach.)User#23:uploads:my/path/to/file.ext
Ich weiß nicht, ob es wirklich noch weit verbreitete "Best Practices" für die Benennung von Redis-Schlüsseln gibt.
Ich habe mit der Verwendung von ASCII-NUL-Zeichen als Trennzeichen experimentiert (da Redis und Python beide 8-Bit-sauber sind). Es sieht ein wenig hässlich aus, wenn Sie sich rohe Schlüssel ansehen, aber die Idee ist, sie hinter einer Abstraktionsschicht zu verstecken. Doppelpunkt- und Pipe-Symbole sind offensichtliche Alternativen, solange die Komponenten Ihres Namensraums diese garantiert nicht verwenden oder Sie bereit sind, jede Komponente nach Bedarf zu codieren. Wenn Sie sie jedoch codieren möchten, möchten Sie die Abstraktionsschicht entwickeln und trotzdem vermeiden, Rohschlüssel anzuzeigen. Dies brachte mich dazu, in meinen Überlegungen nur \ 0 zu verwenden.
Es wird mich interessieren, ob andere Meinungen dazu geäußert werden.
quelle
Für Ihren Anwendungsfall scheint mir HSET / HGET besser zu passen. Es gibt auch den Befehl HKEYS .
Alle diese Befehle sind genauso komplex wie GET / SET / KEYS. Warum also nicht?
Sie könnten dann diese Struktur haben:
oder:
Extrahieren Sie einfach die Benutzer-ID und verwenden Sie sie als Hash-Schlüssel. Ich persönlich bevorzuge diesen Ansatz, da er sich besser anfühlt und Sie auch problemlos nach vorhandenen Benutzer-IDs fragen können.
quelle