Heim  >  Artikel  >  Datenbank  >  Einführung in Redis-Speicheroptimierungsmethoden

Einführung in Redis-Speicheroptimierungsmethoden

尚
nach vorne
2019-11-30 15:36:511731Durchsuche

Einführung in Redis-Speicheroptimierungsmethoden

1. Spezielle Kodierung:

Seit Redis 2.2 können viele Datentypen durch spezielle Kodierung für den Speicherplatz optimiert werden. Unter ihnen können Hash, Liste und Sets, die aus Ganzzahlen bestehen, diese Methode verwenden, um die Speicherstruktur so zu optimieren, dass sie weniger Platz beanspruchen. In einigen Fällen können 9/10 des Speicherplatzes eingespart werden. (Empfohlen: Redis-Video-Tutorial)

Diese speziellen Codierungen sind für die Verwendung von Redis völlig transparent. Tatsächlich handelt es sich lediglich um eine Transaktion zwischen CPU und Speicher. Wenn die Speichernutzung höher ist, wird beim Verarbeiten von Daten natürlich mehr CPU verbraucht und umgekehrt. Redis bietet eine Reihe von Konfigurationsparametern zum Festlegen verschiedener Schwellenwerte im Zusammenhang mit spezieller Codierung, z. B.:

#如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。
hash-max-zipmap-entries 64
#如果Hash中各个字段的最大长度不超过512字节,Redis也将对该Key的Hash Value采用特殊编码方式。
hash-max-zipmap-value 512
#下面两个参数的含义基本等同于上面两个和Hash相关的参数,只是作用的对象类型为List。
list-max-ziplist-entries 512
list-max-ziplist-value 64
#如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
set-max-intset-entries 512

Wenn ein codierter Wert nach der Änderung die Höchstgrenze in den Konfigurationsinformationen überschreitet, führt Redis automatisch eine Konvertierung durch Dieser Vorgang ist sehr schnell, wenn Sie ihn umgekehrt ausführen und einen großen Wert der normalen Kodierung in eine spezielle Kodierung konvertieren. Dies ist am besten, wenn Sie dies zuerst tun Testen Sie einfach zuerst die Konvertierungseffizienz, da solche Konvertierungen oft sehr ineffizient sind.

2. Operationen auf BIT- und Byte-Ebene:

Ab Redis 2.2 stellt Redis GETRANGE/SETRANGE/GETBIT/SETBIT für den Befehl Schlüssel/Wert vom Typ Zeichenfolge bereit. Über diese Befehle können wir auf Wertdaten vom Typ String zugreifen, genau wie beim Betreiben von Arrays.

Zum Beispiel kann die ID, die einen Benutzer eindeutig identifiziert, nur eine Teilzeichenfolge des String-Werts sein. Auf diese Weise kann es einfach mit dem Befehl GETRANGE/SETRANGE extrahiert werden.

Darüber hinaus können Sie BITMAP verwenden, um die Geschlechtsinformationen des Benutzers darzustellen, z. B. 1 für männlich und 0 für weiblich. Wenn diese Methode zur Darstellung der Geschlechtsinformationen von 100.000.000 Benutzern verwendet wird, benötigt sie nur 12 MB Speicherplatz. Gleichzeitig ist die Datendurchquerung über den Befehl SETBIT/GETBIT ebenfalls sehr effizient.

3. Verwenden Sie Hash so oft wie möglich:

Da kleine Daten vom Typ Hash relativ wenig Platz beanspruchen, sollten wir in Betracht ziehen, sie so oft wie möglich in tatsächlichen Anwendungen zu verwenden . Hash-Typ, z. B. Benutzerregistrierungsinformationen, einschließlich Feldern wie Name, Geschlecht, E-Mail, Alter und Passwort.

Natürlich können wir diese Informationen in Form eines Schlüssels speichern, und die vom Benutzer eingegebenen Informationen werden in Form eines Zeichenfolgenwerts gespeichert. Redis bevorzugt jedoch die Speicherung in Form eines Hash, und die oben genannten Informationen werden in Form eines Felds/Werts ausgedrückt.

Jetzt werden wir diese Aussage weiter beweisen, indem wir den Speichermechanismus von Redis lernen. Der spezielle Codierungsmechanismus wurde am Anfang dieses Blogs erwähnt und es gibt zwei Konfigurationsparameter im Zusammenhang mit dem Hash-Typ: hash-max-zipmap-entries und hash-max-zipmap-value.

Was ihren Wirkungsbereich angeht, wurden sie bereits früher genannt, daher werde ich hier nicht näher darauf eingehen. Nehmen wir nun an, dass die Anzahl der im Hash-Wert gespeicherten Felder kleiner als hash-max-zipmap-entrys ist und die Länge jedes Elements ebenfalls kleiner als hash-max-zipmap-value ist. Auf diese Weise erstellt Redis immer dann, wenn ein neuer Hash-Typ-Schlüssel-/Wertspeicher vorhanden ist, einen Speicherplatz mit fester Länge für den Hash-Wert. Die maximale Anzahl vorab zugewiesener Bytes beträgt:

total_bytes = hash-max-zipmap-entries * hash-max-zipmap-value

Auf diese Weise gilt: Alle Hash-Werte Die Position des Feldes wurde reserviert und auf Feld/Wert kann wie auf ein Array zufällig zugegriffen werden. Das Schrittintervall zwischen ihnen ist hash-max-zipmap-value.

Nur ​​wenn die Anzahl der Felder im Hash-Wert oder die Länge eines neuen Elements die beiden oben genannten Parameterwerte überschreitet, erwägt Redis, sie in Form einer Hash-Tabelle erneut zu speichern, andernfalls bleibt sie immer bestehen Auf diese Weise eine effiziente Speicher- und Zugriffsmethode.

Da jeder Schlüssel im Vergleich zum Schlüssel/Wert vom Typ String einige zugehörige Systeminformationen wie Ablaufzeit, LRU usw. speichern muss, reduziert der Hash-Typ die Anzahl der Schlüssel erheblich (Most). Schlüssel werden in Form von Hash-Feldern dargestellt und gespeichert), wodurch die Nutzungseffizienz des Speicherplatzes weiter optimiert wird.

Weitere Redis-Kenntnisse finden Sie in der Spalte Redis-Datenbank-Tutorial.

Das obige ist der detaillierte Inhalt vonEinführung in Redis-Speicheroptimierungsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen