Der Redis-Cluster verwendet kein konsistentes Hashing, sondern führt das Konzept des Hash-Slots ein. Der Redis-Cluster verfügt über 16384 Hash-Slots. Jeder Schlüssel wird nach der CRC16-Verifizierung modulo 16384 überprüft, um zu bestimmen, welcher Slot im Cluster platziert werden soll. Aber warum beträgt die Anzahl der Hash-Slots 16384 (2^14)? Diese Frage wurde auf Github gestellt und der Autor hat auch eine Antwort darauf gegeben.
Warum 16384 (2^14)?
Wenn der Redis-Knoten das Heartbeat-Paket sendet, müssen alle Slots in das Heartbeat-Paket eingefügt werden, damit der Knoten die aktuellen Clusterinformationen kennen kann Bitmap, um es zu komprimieren (2 * 8 (8 bit) * 1024(1k) = 2K
), was bedeutet, dass 16.000 Slots mit 2.000 Speicherplatz erstellt werden.
Obwohl der CRC16-Algorithmus verwendet werden kann, um bis zu 65535 (2^16-1) Slots, 65535=65k, zuzuweisen, sind es nach der Komprimierung 8k (8 * 8 (8 bit) * 1024(1k) = 8K
), was bedeutet, dass 8k Heartbeat-Pakete benötigt werden , der Autor Ich glaube nicht, dass es sich lohnt, dies zu tun; und im Allgemeinen wird ein Redis-Cluster nicht mehr als 1.000 Masterknoten haben, daher sind 16.000 Slots eine geeignetere Wahl.
Originalworte des Autors:
1. Gewöhnliche Heartbeat-Pakete übertragen die vollständige Konfiguration des Knotens auf idempotente Weise um die alte Konfiguration zu aktualisieren. Dies bedeutet, dass sie die Steckplatzkonfiguration des Knotens in ihrer Rohform enthalten. Eine 16-KByte-Steckplatzkonfiguration würde 2 KB Speicher verbrauchen, die Verwendung von 65 KB-Steckplätzen würde jedoch 8 KB Speicher verbrauchen.
2. Gleichzeitig kann der Redis-Cluster aufgrund anderer Designkompromisse nicht auf mehr als 1.000 Knoten erweitert werden.
Daher ist 16k besser geeignet, um sicherzustellen, dass jedes Hauptgerät über genügend Steckplätze verfügt, bis zu 1000. Die Knotenkonfigurationsinformationen von Redis werden über den Bitmap-Speicher übertragen. Vor der Übertragung findet ein Komprimierungsprozess statt. Das Komprimierungsverhältnis hängt stark von der Anzahl der Slots und Knoten ab (denn wenn N klein ist, würde die Bitmap so eingestellt sein). ist ein großer Prozentsatz der gesetzten Bits.) [Anzahl der Slots/Anzahl der Knoten] Je größer N ist, desto kleiner ist das Komprimierungsverhältnis.
Weitere technische Artikel zum Thema Redis finden Sie in der Spalte Redis-Tutorial, um mehr zu erfahren!
Das obige ist der detaillierte Inhalt vonWarum hat Redis 16384 Slots?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!