Redis-Cluster-RTT

Redis-Cluster-RTT

Wir verwenden derzeit Redis als unseren Datenspeicher. Ich erstelle einen neuen Abschnitt, in dem wir Benutzer bewerten und paginieren müssen. Daher denke ich daran, sortierte Sets zum Speichern von Rang und Benutzer-ID zu verwenden. Und Hash zum Speichern der Benutzerprofildaten. Ein Kollege hat mich darauf aufmerksam gemacht, dass wir viele Anfragen an Redis stellen müssen, um Benutzerprofildaten mit HGET abzurufen. Die Roundtrip-Zeit wird also ein Problem sein. Ich hatte vor, HMGET zu verwenden, aber nach einigen Recherchen habe ich herausgefunden, dass es zu Problemen kommen kann, wenn Redis gruppiert ist, weil Schlüssel in verschiedenen Redis-Knoten gespeichert sind. Ich verwende phpredis, das über clientseitiges Sharding verfügt (ich habe Schwierigkeiten zu verstehen, was das ist).

ich dachte, ich könnte es so machen:

Rang

zadd userRank 1 5
zadd userRank 2 2
zadd userRank 3 4
zadd userRank 4 3

Benutzerprofil

hset userProfile user:5 "{'userId':'5','name':'usera'}"
hset userProfile user:4 "{'userId':'4','name':'userb'}"
hset userProfile user:3 "{'userId':'3','name':'userc'}"
hset userProfile user:2 "{'userId':'2','name':'userb'}"

1) Funktioniert HMGET im Redis-Cluster normal?

2) Wenn nicht, was kann ich tun?

3) Gibt es eine bessere Möglichkeit, dies umzusetzen?

Antwort1

  1. HMGET sollte in geclusterten Redis funktionieren, da es nur mit einem einzigen Schlüssel verknüpft ist. Jeder HMGET wird an den Knoten weitergeleitet, der den Schlüssel enthält
  2. /
  3. Es ist keine gute Idee, jeden serialisierten Benutzer in einem Hash zu speichern, da Sie die Möglichkeit verlieren, einige Felder anzufordern/zu erhöhen/zu verringern.

Bevorzugen:

hmset user:5 userId 5 name usera
hmset user:4 userId 4 name userb
hmset user:3 userId 3 name userc
hmset user:2 userId 2 name userb

Ihr Ranking-Schema ist ok. Um die am besten bewerteten Benutzer abzurufen und zu paginieren, führen Sie einfach Folgendes aus:ZREVRANGEBYSCOREund fordern Sie dann jeden Benutzer an.

Notiz:Clusterungist nicht dasselbe wieScherben.

verwandte Informationen