Die sortierten Sets sind sehr schnell beim Hinzufügen, Aktualisieren und Entfernen ihrer Mitglieder. Es hat logarithmische Zeitkomplexität in all diesen Operationen. Da die Mitglieder bestellt werden, ist der Zugriff auf das mittlere Element ebenfalls sehr effizient. Daher ist der sortierte Set ideal für die Implementierung von Echtzeitanwendungen wie Online-Gaming-Bestandteilen, Prioritätswarteschlangen mit geringem Latenz und sekundären Indizes.
Der Zadd -Befehl
Für den Betrieb an sortierten Sets stehen mehrere Befehle zur Verfügung. Der Zadd Der Befehl wird verwendet, um ein oder mehrere Mitglieder mit Punktzahlen zu einem sortierten Set hinzuzufügen, das in einem bestimmten Schlüssel gespeichert ist. Die Zeitkomplexität dieses Befehls ist proportional zum Logarithmus der Anzahl der Elemente. Daher ist es viel schneller als die meisten anderen Redis -Befehle.
Immer wenn wir Mitglieder mit dem Befehl ZADD hinzufügen, gibt es einige direkte Effekte im sortierten Satz.
Da ein sortierter Set eine einzigartige Gruppe von Mitgliedern enthält, kann es nicht erlauben, bereits angegebene Mitglieder in den sortierten Satz hinzuzufügen. Stattdessen aktualisiert es die Punktzahl dieses bestimmten Mitglieds und platziert dieses Element am rechten Index, um die richtige Reihenfolge beizubehalten.
Wenn die sortierte Set -Taste nicht vorhanden ist, erstellt der Befehl ZADD den sortierten Satz und fügt alle angegebenen Mitglieder hinzu.
Wenn der Schlüssel vorhanden ist, aber keinen sortierten Set -Set -Typ -Wert enthalten soll, wird ein Fehler angezeigt.
Syntax
Zadd[Nx | Xx] [gt | LT] [CH] [Incoly] [Score Mitglied…]
Normalerweise gibt der Befehl ZADD die Anzahl der zu dem sortierten Satz hinzugefügten Mitglieder zurück. Daher ignoriert es die Score -Updates für die bereits vorhandenen Mitglieder. Dieser Rückgabewert ändert sich, wenn der CH Option wird angegeben. Daher wird die Anzahl aller veränderten Mitglieder vom Befehl ZADD zurückgegeben. Diese Zählung enthält die Summe der neu hinzugefügten und die Partitur veränderte Mitglieder.
Beispiel 01 - Online -Gaming -Rangliste
Nehmen wir ein Szenario an, in dem wir eine User -Rangliste für ein Online -Abenteuerspiel verwalten müssen, das von Tausenden von Benutzern auf der ganzen Welt gespielt wird. Die Art des Spiels ist, dass jeder Benutzer Gold pro erfolgreicher Abschluss der einzelnen Mission verdient. Redis sortiertes Satz wäre die ideale Datenstruktur, die wir für diese Art von Echtzeit-Anwendung mit niedriger Latenz verwenden können.
Wir werden ein vom Schlüssel identifizierter sortierter Satz erstellen Gameleaderboard. Darüber hinaus werden mehrere Spieler als sortierte Set -Mitglieder mit unterschiedlichen Punktzahlen hinzugefügt. Die verdiente Goldmenge jedes Benutzers wird als sortierter Set -Score abgebildet.
Hinzufügen mehrerer Mitglieder mit ZADD
Zadd Gameleaderboard 2300 Gamer: 1 1400 Spieler: 2 800 Spieler: 3 3500 Gamer: 4 4000 Spieler: 5
Ausgang:
Wie erwartet beträgt der Rückgabewert 5. Es ist die Anzahl der Mitglieder, die dem in der Schlüssel gespeicherten sortierten Set hinzugefügt wurden Gameleaderboard.
Lassen Sie uns überprüfen, ob das sortierte Set alle Mitglieder auf geordnete Weise enthält. Wir können den Befehl zrange verwenden, um alle Mitglieder mit ihren Punktzahlen abzufragen, wie im Folgenden gezeigt:
Zrange Gameleaderboard 0 10 With Scores
Wie bereits erwähnt, die Gameleaderboard Sortierte Set speichert seine Mitglieder in aufsteigender Reihenfolge basierend auf ihren Punktzahlen.
Hinzufügen ein neues Mitglied mit der gleichen Punktzahl wie das bestehende Mitglied
Versuchen wir, einen anderen Benutzer hinzuzufügen Spieler: 6 mit der goldenen Menge von 3500. Redis sortierte Sets ermöglichen das Einfügen von Mitgliedern mit dem gleichen Punktzahlwert. Daher sollte diese Operation das erfolgreich hinzufügen Spieler: 6.
Zadd Gameleaderboard 3500 Gamer: 6
Ausgang:
Wie erwartet ist der Rückgabewert 1, was das Mitglied erfolgreich hinzugefügt wurde.
Überprüfen wir die sortierten Set -Mitglieder erneut mit dem Befehl Zrange.
Das Mitglied Spieler: 6 wurde kurz nach dem eingefügt Spieler: 4. Redis sortierte Sets Verwenden Sie die lexikografische Reihenfolge, wenn die Bewertungswerte für die angegebenen Mitglieder gleich sind. Es vergleicht die Mitgliederketten als eine Reihe von Bytes und ordnet sie entsprechend an.
Verwendung von NX- und XX -Optionen mit ZADD
Nehmen wir an, wir müssen nur die Punktzahl eines vorhandenen Mitglieds aktualisieren und keine neuen Mitglieder zum sortierten Set hinzufügen Gameleaderboard. Der Xx Option wird verwendet, um dies zu erreichen.
Zadd Gameleaderboard XX 3500 Gamer: 7 3000 Spieler: 5
Wie erwartet beträgt der Rückgabewert 0, was bedeutet, dass keine neuen Mitglieder hinzugefügt wurden. Wir werden das sortierte Set erneut inspizieren.
Der Spieler: 7 Das Mitglied wurde nicht zum sortierten Satz hinzugefügt, aber das Spieler: 5 Die Punktzahl des Mitglieds wurde geändert und entsprechend platziert.
Der NX Option macht das genaue Gegenteil der Xx.
Zadd Gameleaderboard NX 5500 Gamer: 7 4000 Gamer: 5
Lassen Sie uns das sortierte Set erneut inspizieren.
Wie oben erwähnt, das neue Mitglied Spieler: 7 wurde erfolgreich hinzugefügt. Der Spieler: 5 Der Bewertungswert wurde nicht geändert.
Verwendung von LT- und GT -Optionen mit ZADD
Die LT- und GT -Optionen sind sehr nützlich, wenn Sie die Bewertungswerte bedingt aktualisieren müssen. Jedes dieser beiden Flags verhindert nicht, dass das sortierte Set neue Elemente hinzufügen.
Wenn Sie die LT -Option mit dem Befehl ZADD angeben, ändert sie den Punktzahl nur dann, wenn die neue Punktzahl geringer ist als die aktuelle Punktzahl dieses Elements. Die GT -Option ändert die Punktzahl nur, wenn die neue Punktzahl größer ist als die aktuelle Punktzahl.
Zadd Gameleaderboard LT 2100 Gamer: 1 1500 Gamer: 2
Lassen Sie uns das inspizieren Gameleaderboard sortiertes Set.
Wie Sie sehen können, die Spieler: 1 Die vorherige Punktzahl des Mitglieds betrug 2300. Daher wurde die Punktzahl durch diesen Vorgang geändert und wurde auf 2100 geändert. Der Spieler: 2-Die Partitur der Mitglieder wird nicht geändert, da die vorherige Punktzahl geringer war als die neue Punktzahl.
Die CH -Option
Normalerweise gibt der Befehl ZADD die Anzahl der hinzugefügten Mitglieder zurück. Mit der CH -Option wird die Summe der neu hinzugefügten und die vorhandenen Mitglieder zurückgegeben, deren Bewertungen geändert werden.
Zadd Gameleaderboard CH 2100 Gamer: 8 1500 Gamer: 2 3550 Gamer: 4
Bei der Ausführung des obigen Befehls die Spieler: 8 Mitglied muss hinzugefügt werden. Der Spieler: 2 Und Spieler: 4 Die Bewertungswerte der Mitglieder müssen geändert werden. Daher beträgt die Summe der neu hinzugefügten und modifizierten Mitglieder 3.
Verwendung von Inchere -Option in ZADD
Der Inkretierung Die Option erhöht die Bewertung eines Mitglieds nach der angegebenen Inkrementnummer. Der Befehl zadd verhält sich genau wie Zincrby.
Lassen Sie uns die erhöhen Spieler: 7 Die Punktzahl des Mitglieds um weitere 100, wie im Folgenden gezeigt
Zadd Gameleaderboard Incol 100 Gamer: 7
Wie erwartet wurde der vorherige Bewertungswert um 100 erhöht. Die neue Punktzahl wird als 5600 zurückgegeben.
Abschluss
Redis sortiertes Set ist eine fortgeschrittenere Datenstruktur, die alle Eigenschaften von gewöhnlichen Sätzen erbt. Die sortierten Sets sind viel schneller als die meisten Redis -Befehle. Daher werden die sortierten Sets in Echtzeit-Anwendungen mit niedriger Latenz in Echtzeit häufig verwendet. Der Befehl ZADD wird verwendet, um einen sortierten Set in einem bestimmten Schlüssel mit mehreren Mitgliedern zu erstellen. Die Mitglieder werden basierend auf ihren Bewertungswerten bestellt. Immer wenn die Bewertungswerte für mehrere Mitglieder gleich sind, erfolgt die Bestellung unter Verwendung der lexikografischen Bestellung.