Wie man ein einfaches Redis Leaderboard implementiert

Bei diesem Text handelt es sich um eine maschinell erstellte Übersetzung. Eine überarbeitete Version ist in Planung.

Die IONOS Community wird ab dem 01.01.2021 nicht mehr verfügbar sein. Wir laden Sie ein, uns auf Twitter oder Facebook zu folgen.

Wenn Sie Fragen zu unseren Produkten haben, finden Sie im IONOS Hilfe-Center weitere Informationen. Alternativ hilft Ihnen unser Support-Team unter @IONOS_hilft gerne weiter.

Einführung

Erfahren Sie, wie Sie in Redis eine einfache Rangliste erstellen. Redis ist ein beliebter Key-Value-Speicher, der auf Geschwindigkeit und Flexibilität optimiert ist. Die sortierten Sets von Redis eignen sich perfekt für die Implementierung einer Rangliste, was Redis zu einer beliebten Wahl für viele Gaming-Anwendungen und Websites gemacht hat.

Anforderungen

  • Ein Cloud Server unter Linux (CentOS 7 oder Ubuntu 14.04).
  • Redis ist installiert und läuft. Siehe unseren Artikel über die  Installation von Redis auf einem IONOS Linux Cloud Server  wenn nötig.

Sortierte Sets

Für dieses Projekt werden wir sortierte Sets verwenden, um die Highscoreliste zu pflegen. Ein sortiertes Set ist eine Sammlung von Zeichenketten, die nach einem von Ihnen festgelegten Sortierwert sortiert sind. Obwohl Partituren wiederholt werden können, können Streicher dies nicht.

Das bedeutet, dass alles, was Sie tun müssen, um die Punktzahl eines Benutzers zu aktualisieren, ist, diesen Benutzer einfach wieder in die sortierte Menge aufzunehmen, diesmal mit der neuen Punktzahl. Dies hat den Effekt, dass die bestehende Zeichenkette mit der neuen Partitur aktualisiert wird.

Wir werden den ZADD Befehl, um die Ergebnisse zu aktualisieren, ZRANK um den Rang eines Spielers zu erhalten, und ZRANGE um eine Liste der 5 besten Spieler zu erhalten.

Daten zur Rangliste hinzufügen

Beginnen wir mit dem Hinzufügen einiger Testdaten zur Rangliste. Melden Sie sich von der Befehlszeile aus mit dem Befehl bei Redis an:

sudo redis-cli

ZADD zum Hinzufügen von Daten

Als nächstes verwenden Sie den Befehl zadd, um Spieler und ihre Punktzahlen hinzuzufügen. Die Syntax von zadd ist:

zadd [set name] [score] [string]

Für dieses Beispiel benennen wir unsere Set-Rangliste, die Punktzahl ist die aktuelle Punktzahl des Spielers im Spiel und die Zeichenkette ist der Name des Spielers.

Füge drei Spieler mit den folgenden drei Befehlen hinzu:

zadd leaderboard 1 "Alice"
zadd leaderboard 30 "Bob"
zadd leaderboard 5300 "Carol"

ZREVRANGE zum Auflisten von Daten

Sie können diese Daten mit dem Befehl zrevrange auflisten. Dieser Befehl benötigt zwei Argumente:

zrevrange [set name] [first position] [second position]

Es gibt alle Ergebnisse zwischen diesen beiden Positionen zurück, sortiert nach Punktzahl in umgekehrter Reihenfolge, zuerst die höchste Punktzahl. (Das Gegenteil von zrevrange ist zrange, das Ergebnisse liefert, die zuerst mit der niedrigsten Punktzahl sortiert wurden.)

Beachten Sie, dass Redis die Standard-Unix-Notation verwendet, was bedeutet, dass das erste Element in einer Liste die Nummer 0, das zweite Element die Nummer 1 und so weiter ist. Um die ersten drei Punkte zu erhalten, werden wir den Befehl verwenden:

zrevrange leaderboard 0 2

Um die besten 100 Ergebnisse zu erhalten, wäre der Befehl:

zrevrange leaderboard 0 99

Und so weiter.

Lassen Sie uns die drei besten Ergebnisse auflisten:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Carol"
2) "Bob"
3) "Alice"

Wie du sehen kannst, liegt Carol an erster Stelle, Bob an zweiter Stelle und Alice an dritter Stelle zurück.

Wir können dem Befehl auch Withscores hinzufügen, so dass er auch deren Ergebnisse zurückgibt:

127.0.0.1:6379> zrevrange leaderboard 0 2 withscores
1) "Carol"
2) "5300"
3) "Bob"
4) "30"
5) "Alice"
6) "1"

Als nächstes, lassen Sie uns eine vierte Person hinzufügen:

zadd leaderboard 25 "Don"

Wir wollen aber trotzdem nur die ersten drei Spieler zeigen:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Carol"
2) "Bob"
3) "Don"

ZADD zur Aktualisierung der Daten

Am Wochenende arbeitet Alice hart und schafft es, viele Punkte zu sammeln. Wir können Alice's Partitur einfach aktualisieren, indem wir sie erneut hinzufügen, diesmal mit der neuen Partitur:

zadd leaderboard 31 "Alice"

Wenn wir die ersten drei Spieler erneut auflisten, sehen wir, dass Alice nun auf Platz zwei liegt und Don nicht mehr in der Rangliste aufgeführt ist:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Carol"
2) "Alice"
3) "Bob"

ZREM zum Entfernen von Daten

Mehrere Spieler haben sich darüber beschwert, dass Carols Punktzahl verdächtig hoch ist. Wenn Sie die Protokolle Ihres Spiels überprüfen, finden Sie Beweise dafür, dass sie betrogen hat. Nachdem du Carol aus dem Spiel verbannt hast, musst du sie mit dem Befehl zrem aus der Rangliste entfernen.

Die Syntax für zrem lautet:

zrem [set name] [string]

Lasst uns Carol mit dem Befehl aus der Rangliste entfernen:

zrem leaderboard "Carol"

Als wir die Tabelle aktualisieren, ist Alice nun an der Spitze:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Alice"
2) "Bob"
3) "Don"

Auswahl eines Redis-Clients

Sie benötigen einen Redis-Client, der als Schnittstelle zwischen Redis und Ihrer bevorzugten Programmiersprache dient. Für dieses Projekt werden wir PHP verwenden, aber es gibt Redis-Clients, die für Dutzende von Sprachen verfügbar sind. Die offizielle Redis-Website führt eine vollständige Liste der Redis-Clients nach Programmiersprache. Empfohlene Klienten werden mit einem Goldstern gekennzeichnet

Die empfohlenen PHP-Clients sind phpredis das als PHP-Modul kompiliert und installiert wird, und Predis eine PHP-Bibliothek.. Wir werden Predis für dieses Tutorial verwenden, aber phpredis ist auch ein ausgezeichneter Kunde.

Predis installieren und testen

Der einfachste Weg, Predis zu installieren, ist, es vom offiziellen Pear-Kanal herunterzuladen. In Ubuntu 14.04 müssen Sie zuerst Pear mit dem Befehl installieren:

sudo apt-get install php-pear

Verbinden Sie sich mit dem offiziellen Pear-Server und installieren Sie Predis mit den Befehlen:

sudo pear channel-discover pear.nrk.io
sudo pear install nrk/Predis

Sobald dies abgeschlossen ist, können Sie die Predis-Installation mit einem einfachen PHP-Skript testen. Wechseln Sie in Ihr Haupt-Webverzeichnis und erstellen Sie eine neue Datei namens predis-test.php mit dem Befehl:

sudo nano predis-test.php

Den folgenden Inhalt in diese Datei einfügen:

<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();

$client = new Predis\Client();
$client->set('test', 'Hello world!');
$message = $client->get('test');

echo $message;

?>

Speichern und beenden Sie die Datei und betrachten Sie sie dann in einem Browser unter http://example.com/predis-test.php. Wenn Predis installiert ist und sich mit Redis verbindet, erscheint auf der Seite "Hallo Welt".

Ranglistenergebnisse auf einer Website anzeigen".

Lassen Sie uns abschließend die drei besten Highscores in einer Tabelle anzeigen. Um dies zu tun, müssen wir PHP den Inhalt des Arrays in eine HTML-Tabelle stellen lassen.

Erstellen Sie in Ihrem Webverzeichnis eine neue Datei namens leaderboard.php mit dem Befehl:

sudo nano leaderboard.php

Den folgenden Inhalt in diese Datei einfügen:


<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();

$client = new Predis\Client();

$scores = $client->zRevRange('leaderboard', 0, 2, array('withscores' => true));

?>

<table cellpadding="0" cellspacing="5" >
  <tr>
    <td><b>Player</b></td>
    <td><b>Score</b></td>
  </tr>

<?php
  foreach($scores as $key => $index) {
    ?>
    <tr>
      <td><?php echo $key; ?></td>
      <td><?php echo $index; ?></td>
    </tr>
<?php
  }
?>

</table>

Speichern und beenden Sie die Datei und betrachten Sie sie dann in einem Browser unter http://example.com/leaderboard.php. Sie sehen die drei besten Ergebnisse in unserer aktuellen Rangliste.