Springboot integriert Redis, um Partitionen zu ändern
Der Ursprung des Problems
In letzter Zeit wird Springboot verwendet, um Redis zu integrieren. Eine dynamische Datenquelle des Systems stellt eine Verbindung zu verschiedenen Datenbanken her und speichert die verwendeten Redis zwischen in verschiedenen Redis-Partitionen, also unterschiedlich in der Bibliothek.
Alte Versionslösung
Die alte Version hier bezieht sich auf die Version vor 2.0. Die 1.5.9, die ich verwendet habe, ist in Ordnung.
Die Konfigurationsklasse von Redis wird hier nicht veröffentlicht, es gibt viele davon online.
1. Verwenden Sie JedisConnectionFactory, um
@Autowired
JedisConnectionFactory jedisConnectionFactory;
jedisConnectionFactory.setDatabase(database);
Nach dem Login kopieren
2 zu ändern. Verwenden Sie redisTemplate, um
redisTemplate.getConnectionFactory().getConnection().select(database);
Nach dem Login kopieren
Die beiden oben genannten Methoden müssen der Redis-Konfigurationsklasse nicht speziell hinzugefügt werden bezieht sich hier auf nach 2.0 Ja, ich verwende 2.0.3
Die folgenden Beans müssen zur Redis-Konfigurationsklasse hinzugefügt werden:
Partitionierung ist die Art und Weise, wie Sie die Daten auf mehrere Redis-Instanzen verteilen, sodass jede Instanz nur einen Teil der Daten enthält.
Warum Partitionierung nützlich ist
Redis-Partitionierung hat zwei Hauptziele:
Sie ermöglicht größere Datenbanken und nutzt den kombinierten Speicher vieler Computer. Ohne Partitionierung sind Sie auf den Speicher eines einzelnen Computers beschränkt.
Es ermöglicht die Erweiterung der Rechenleistung auf mehrere Kerne und mehrere Computer sowie die Erweiterung der Netzwerkbandbreite auf mehrere Computer und Netzwerkadapter.
Angenommen, wir haben 4 Redis-Instanzen (R0, R1, R2, R3) mit vielen Schlüsseln, die Benutzer darstellen, z. B. Benutzer: 1, Benutzer: 2 usw., dann gibt es beim Speichern eines Schlüssels viele Möglichkeiten, wie wir dies tun können.
- Der einfachste Weg ist die Partitionierung nach Bereich, d. h. die Zuweisung von Daten zur angegebenen Redis-Instanz entsprechend dem Zuordnungsbereich des Objekts. Beispielsweise legen wir fest, dass diejenigen mit IDs von 0 bis 10000 R0, 10001 bis 20000 R1 usw. zugewiesen werden. Diese Methode ist möglich, aber ein Nachteil besteht darin, dass eine Tabelle benötigt wird, um diese Zuordnungsbeziehung aufrechtzuerhalten. Diese Tabelle muss verwaltet werden, und jeder Schlüssel erfordert eine solche Tabelle. Daher ist die Bereichspartitionierung in Redis im Allgemeinen verpönt, da sie viel weniger effizient ist als andere Partitionierungsmethoden. Zusätzlich zur Bereichspartitionierung gibt es eine weitere Methode, die Hash-Partitionierung:
- Schritt 1. Nehmen Sie den Schlüssel und wenden Sie eine Hash-Funktion an, um ihn in eine Zahl umzuwandeln. Wenn der Schlüssel beispielsweise foobar ist und die Hash-Funktion crc32 ist, dann gibt crc32(foobar) 93024922 aus. Schritt 2. Verwenden Sie Modulo-Arithmetik (Modulo) für diese Zahl, um sie in eine direkte Zahl von 0 bis 3 umzuwandeln, sodass diese Zahl einer meiner vier Redis-Instanzen zugeordnet werden kann. Beispiel: 93024922 % 4 = 2, daher sollte foobar auf der R2-Instanz gespeichert werden.
(PS: Führen Sie zunächst eine Hash-Operation für den Schlüssel durch, um eine Zahl zu erhalten, und ermitteln Sie dann mithilfe des Modulo dieser Zahl, auf welcher Instanz die endgültigen Daten gespeichert werden sollen.)
Es gibt viele Möglichkeiten zur Partitionierung Die beiden oben genannten Beispiele sollten Sie verstehen können. Eine fortgeschrittene Form der Hash-Partitionierung wird als konsistentes Hashing bezeichnet und von mehreren Redis-Clients und -Brokern implementiert.
Verschiedene Partitionsimplementierungen
Client-Partitionierung: Für einen bestimmten Schlüssel wählt der Client direkt den richtigen Knoten zum Lesen und Schreiben aus. Viele Redis-Clients implementieren eine clientseitige Partitionierung.
Proxy-Partition: Der Client sendet eine Anfrage an einen Proxy und der Proxy kommuniziert mit Redis. Der Proxy wählt basierend auf unserer Konfiguration die richtige Redis-Instanz aus.
Abfrageweiterleitung: Sie können Ihre Anfrage an jede Redis-Instanz senden und die Instanz leitet Ihre Anfrage an den richtigen Server weiter.
(PS: Für einen bestimmten Schlüssel besteht die Aufgabe der Partitionierung darin, eine korrekte Redis-Instanz auszuwählen. Dieser Auswahlprozess kann dann vom Client, Agenten oder der Redis-Instanz durchgeführt werden.)
Nachteile der Partitionierung
1, Vorgänge mit mehreren Schlüssel werden normalerweise nicht unterstützt. Für Schlüssel, die zwei verschiedenen Redis-Instanzen zugeordnet sind, können Sie keine Einfügevorgänge für sie ausführen.
2. Redis-Transaktionen können nicht für Vorgänge mit mehreren Schlüsseln verwendet werden
3 Die Partitionsgranularität ist entscheidend, daher ist es unmöglich, die Daten mit einem einzigen sehr großen Schlüssel (z. B. einem sehr großen sortierten Satz) aufzuteilen 4. Bei der Verwendung von Partitionen wird die Datenverarbeitung komplizierter. Beispielsweise müssen Sie mehrere RDB/AOF-Dateien verarbeiten. Um die Daten zu sichern, müssen persistente Dateien von mehreren Instanzen und Hosts aggregiert werden.
5. Das Hinzufügen und Löschen von Kapazität (Speicherplatz) wird komplizierter. Beispielsweise unterstützt Redis Cluster eine transparente Datenneuverteilung, die zur Laufzeit Knoten hinzufügt und entfernt, andere Systeme wie Clientpartitionen und Broker unterstützen diese Funktion jedoch nicht. Hier hilft jedoch eine Technik namens Pre-Sharding.
Datenspeicher oder Cache?
Wenn Redis als Datenspeicher verwendet wird, muss ein bestimmter Schlüssel immer derselben Redis-Instanz zugeordnet werden. Bei Verwendung als Cache stellt es kein großes Problem dar, wenn ein bestimmter Knoten nicht verfügbar ist.
Konsistente Hashing-Implementierungen sind normalerweise in der Lage, zu anderen Knoten zu wechseln, wenn der bevorzugte Knoten für einen bestimmten Schlüssel nicht verfügbar ist. Wenn ein neuer Knoten hinzugefügt wird, werden ebenfalls einige der neuen Schlüssel auf dem neuen Knoten gespeichert.
Wenn Sie Redis als Cache verwenden, ist die Skalierung durch konsistentes Hashing einfach.
Wenn Redis als Speicher verwendet wird, wird eine feste Schlüssel-zu-Knoten-Zuordnung verwendet, sodass die Anzahl der Knoten festgelegt sein muss und nicht geändert werden kann. Redis Cluster ist ein praktikables System, wenn Schlüssel zwischen Knoten neu verteilt werden müssen.
Das obige ist der detaillierte Inhalt vonWie integriert Springboot Redis, um Partitionen zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!