Heim  >  Artikel  >  Backend-Entwicklung  >  Redis-Tutorial (14): Einführung in die Speicheroptimierung

Redis-Tutorial (14): Einführung in die Speicheroptimierung

黄舟
黄舟Original
2016-12-28 15:12:251382Durchsuche

1. Spezielle Kodierung:

Seit Redis 2.2 können viele Datentypen durch spezielle Kodierung hinsichtlich des Speicherplatzes 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.
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 den Wert in den Konfigurationsinformationen überschreitet. Wenn der maximale Grenzwert vorliegt Wenn Sie dies erreichen, konvertiert Redis es automatisch in ein normales Codierungsformat. Wenn Sie jedoch einen größeren Wert der normalen Codierung in eine spezielle Codierung konvertieren, empfiehlt Redis, dies offiziell zu tun Testen Sie am besten vorher kurz die Konvertierungseffizienz, da solche Konvertierungen oft sehr ineffizient sind.

2. Operationen auf BIT- und Byte-Ebene:


Ab Redis 2.2 stellt Redis vier Zeichen bereit: GETRANGE/SETRANGE/GETBIT/SETBIT Zeichenfolgentyp Schlüssel/ Wertbefehl. Über diese Befehle können wir auf Wertdaten vom Typ String zugreifen, genau wie beim Betreiben von Arrays. Beispielsweise 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 Hash-Typ relativ wenig Platz beanspruchen, sollten wir in praktischen Anwendungen, wie z. B. der Benutzerregistrierung, die Verwendung des Hash-Typs so oft wie möglich in Betracht ziehen Informationen, zu denen Felder wie Name, Geschlecht, E-Mail, Alter und Passwort gehören. 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 anbelangt, wurden sie bereits 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-. Einträge * hash -max-zipmap-value
Auf diese Weise wurden die Positionen aller Felder im Hash reserviert und auf das Feld/den Wert kann wie beim Zugriff auf ein Array zufällig zugegriffen werden. Das Schrittintervall zwischen ihnen ist hash-max -zipmap- Wert. Nur wenn die Anzahl der Felder im Hash-Wert bzw. die Länge eines neuen Elements die beiden oben genannten Parameterwerte überschreitet, erwägt Redis eine erneute Speicherung in Form einer Hash-Tabelle, andernfalls wird diese effiziente Speicherung immer beibehalten und Zugang. Da jeder Schlüssel außerdem einige zugehörige Systeminformationen wie Ablaufzeit, LRU usw. speichern muss, reduziert der Hash-Typ im Vergleich zum Schlüssel/Wert vom Typ String die Anzahl der Schlüssel erheblich (die meisten Schlüssel werden im Formular dargestellt und gespeichert). eines Hash-Feldes), wodurch die Nutzungseffizienz des Speicherplatzes weiter optimiert wird.

Das Obige ist der Inhalt des Redis-Tutorials (14): Einführung in die Speicheroptimierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn