So optimieren Sie den Redis-Cache-Speicherplatz
Szeneneinstellung
1. Wir müssen POJO im Cache speichern. Die Klasse ist wie folgt definiert direkt, drucken Sie
length=284**, **Diese Methode ist die einfachste und am häufigsten verwendete Methode. Die spezifischen Daten lauten wie folgt:
{"applyAmount":200.11,"bizInfo":"XX", „checkTime“: „2023-02-02“, „investor“: „ABCD“, „otherTime“: „2023-04-10 17:45:17.717“, „preCheckStatus“: „VERARBEITUNG“, „testQueryTime“: „ 2023- 04-10 17:45:17.717","testStatus="SUCCESS",type":Y",userAmount":1000.00,"userPin":ABCDEFGHIJ",userRate":0.002} Wir haben festgestellt, dass das Obige viele nutzlose Daten enthält und die Attributnamen nicht gespeichert werden müssen.
Verbesserung 1 – Entfernen Sie den Attributnamen wie folgt:
["ERFOLGREICH", "ABCDEFGHIJ", "ABCD", "2023-04-10 17:45:17.717",null,"XX", "2023-04-10 17:45:17.717", 1000,00,0,002,200,11, „Y“, „2023-02-02“, „PROCESSING“]Wir haben festgestellt, dass es nicht erforderlich ist, Null zu speichern. Das Zeitformat wird in eine Zeichenfolge serialisiert, was zu Daten führt Erweiterung, daher sollten wir bessere Serialisierungstools verwenden.Verbesserung 2 – Bessere Serialisierungstools verwendenpublic class TestPOJO implements Serializable {
private String testStatus;
private String userPin;
private String investor;
private Date testQueryTime;
private Date createTime;
private String bizInfo;
private Date otherTime;
private BigDecimal userAmount;
private BigDecimal userRate;
private BigDecimal applyAmount;
private String type;
private String checkTime;
private String preTestStatus;
public Object[] toValueArray(){
Object[] array = {testStatus, userPin, investor, testQueryTime,
createTime, bizInfo, otherTime, userAmount,
userRate, applyAmount, type, checkTime, preTestStatus};
return array;
}
public CreditRecord fromValueArray(Object[] valueArray){
//具体的数据类型会丢失,需要做处理
}
}
Nach dem Login kopieren
Wählen Sie bessere Serialisierungstools, um eine Feldkomprimierung und ein angemessenes Datenformat zu erreichen. Drucken Sie **Länge = 92, **der Speicherplatz wird im Vergleich zum vorherigen Schritt um 40 % reduziert. public class TestPOJO implements Serializable { private String testStatus; private String userPin; private String investor; private Date testQueryTime; private Date createTime; private String bizInfo; private Date otherTime; private BigDecimal userAmount; private BigDecimal userRate; private BigDecimal applyAmount; private String type; private String checkTime; private String preTestStatus; public Object[] toValueArray(){ Object[] array = {testStatus, userPin, investor, testQueryTime, createTime, bizInfo, otherTime, userAmount, userRate, applyAmount, type, checkTime, preTestStatus}; return array; } public CreditRecord fromValueArray(Object[] valueArray){ //具体的数据类型会丢失,需要做处理 } }
Dies ist ein Teil der Binärdaten, der in Binärform verarbeitet werden muss. Nachdem Sie die Binärdatei in eine Zeichenfolge konvertiert haben, drucken Sie sie wie folgt aus:
��SUCCESS�ABCDEFGHIJ�ABCD� �j�6���XX� �j� 6�� ��?`bM����@i � �Q�Y�2023-02-02�VERARBEITUNGAls wir dieser Idee folgten und tiefer gruben, stellten wir fest, dass wir den Datentyp manuell auswählen können. Um extremere Optimierungseffekte zu erzielen und sich für die Verwendung kleinerer Datentypen zu entscheiden, werden weitere Verbesserungen erzielt.Verbesserung 3 – Optimierte Datentypen
Im obigen Anwendungsfall sind die drei Felder testStatus, preCheckStatus und investor tatsächlich Aufzählungszeichenfolgentypen (wie Byte oder Int usw.). Durch das Ersetzen der Zeichenfolge kann zusätzlich Platz gespart werden. Sie können den Typ Long anstelle einer Zeichenfolge verwenden, um checkTime darzustellen, sodass das Serialisierungstool weniger Bytes ausgibt.TestPOJO pojo = new TestPOJO(); pojo.setApplyAmount(new BigDecimal("200.11")); pojo.setBizInfo("XX"); pojo.setUserAmount(new BigDecimal("1000.00")); pojo.setTestStatus("SUCCESS"); pojo.setCheckTime("2023-02-02"); pojo.setInvestor("ABCD"); pojo.setUserRate(new BigDecimal("0.002")); pojo.setTestQueryTime(new Date()); pojo.setOtherTime(new Date()); pojo.setPreTestStatus("PROCESSING"); pojo.setUserPin("ABCDEFGHIJ"); pojo.setType("Y");
Länge = 69
Verbesserung 4 – ZIP-Komprimierung berücksichtigen
Zusätzlich zu den oben genannten Punkten können Sie auch die Verwendung von The ZIP in Betracht ziehen Wenn der Inhalt groß ist oder sich wiederholt, ist die Wirkung der ZIP-Komprimierung offensichtlich. Wenn der gespeicherte Inhalt ein TestPOJO-Array ist, kann die ZIP-Komprimierung geeignet sein.
Bei Dateien, die kleiner als 30 Byte sind, kann die ZIP-Komprimierung die Dateigröße erhöhen, aber nicht unbedingt die Dateigröße verringern. Bei weniger repetitiven Inhalten lässt sich keine nennenswerte Verbesserung erzielen. Und es gibt CPU-Overhead. Nach der oben genannten Optimierung ist die ZIP-Komprimierung keine erforderliche Option mehr. Tests auf der Grundlage tatsächlicher Daten sind erforderlich, um den ZIP-Komprimierungseffekt zu bestimmen.Endlich implementiert
Die oben genannten Verbesserungsschritte spiegeln die Optimierungsideen wider, aber der Deserialisierungsprozess führt zum Verlust von Typen, was umständlicher zu handhaben ist, daher müssen wir auch das Problem der Deserialisierung berücksichtigen.
Wenn das Cache-Objekt vordefiniert ist, können wir jedes Feld vollständig manuell verarbeiten. Daher wird im tatsächlichen Kampf empfohlen, die manuelle Serialisierung zu verwenden, um den oben genannten Zweck zu erreichen, eine verfeinerte Steuerung zu erreichen und den besten Komprimierungseffekt und minimalen Leistungsaufwand zu erzielen. Sie können sich auf den folgenden msgpack-Implementierungscode beziehen. Bitte packen Sie selbst bessere Tools wie Packer und UnPacker:System.out.println(JSON.toJSONString(pojo).length());
System.out.println(JSON.toJSONString(pojo.toValueArray()).length());
Szenarioerweiterung
Angenommen, wir speichern Daten für 200 Millionen Benutzer. und jeder Benutzer enthält 40 Felder, die Länge des Feldschlüssels beträgt 6 Byte und die Felder werden separat verwaltet.
Normalerweise denken wir an die Hash-Struktur, und die Hash-Struktur speichert Schlüsselinformationen, die zusätzliche Ressourcen beanspruchen. Gemäß den oben genannten Ideen können Sie eine Liste anstelle einer Hash-Struktur verwenden. Durch den offiziellen Redis-Tooltest erfordert die Verwendung der Listenstruktur 144 GB Speicherplatz, während die Verwendung der Hash-Struktur 245 GB Speicherplatz erfordert** (Wenn mehr als 50 % der Attribute leer sind, ist ein Test erforderlich, um festzustellen, ob dies der Fall ist immer noch anwendbar)**
Im obigen Fall haben wir mehrere sehr einfache Maßnahmen ergriffen, um den Speicherplatz in Szenarien mit großen Datenmengen und hohen Leistungsanforderungen um mehr als 70 % zu reduzieren , es ist sehr zu empfehlen. :• Verwenden Sie Arrays anstelle von Objekten (wenn eine große Anzahl von Feldern leer ist, müssen Sie Serialisierungstools verwenden, um Nullen zu komprimieren)
• Verwenden Sie bessere Serialisierungstools
# 🎜 🎜#• Verwenden Sie kleinere Datentypen• Erwägen Sie die Verwendung einer ZIP-Komprimierung• und Vergleich sind erforderlich)
Das obige ist der detaillierte Inhalt vonSo optimieren Sie den Redis-Cache-Speicherplatz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

Um alle Schlüssel in Redis anzuzeigen, gibt es drei Möglichkeiten: Verwenden Sie den Befehl keys, um alle Schlüssel zurückzugeben, die dem angegebenen Muster übereinstimmen. Verwenden Sie den Befehl scan, um über die Schlüssel zu iterieren und eine Reihe von Schlüssel zurückzugeben. Verwenden Sie den Befehl Info, um die Gesamtzahl der Schlüssel zu erhalten.

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

Der Redis-Zähler ist ein Mechanismus, der die Speicherung von Redis-Schlüsselwertpaaren verwendet, um Zählvorgänge zu implementieren, einschließlich der folgenden Schritte: Erstellen von Zählerschlüssel, Erhöhung der Zählungen, Verringerung der Anzahl, Zurücksetzen der Zählungen und Erhalt von Zählungen. Die Vorteile von Redis -Zählern umfassen schnelle Geschwindigkeit, hohe Parallelität, Haltbarkeit und Einfachheit und Benutzerfreundlichkeit. Es kann in Szenarien wie Benutzerzugriffszählungen, Echtzeit-Metrikverfolgung, Spielergebnissen und Ranglisten sowie Auftragsverarbeitungszählung verwendet werden.

Um die Operationen zu sperren, muss die Sperre durch den Befehl setNX erfasst werden und dann den Befehl Ablauf verwenden, um die Ablaufzeit festzulegen. Die spezifischen Schritte sind: (1) Verwenden Sie den Befehl setNX, um zu versuchen, ein Schlüsselwertpaar festzulegen; (2) Verwenden Sie den Befehl Ablauf, um die Ablaufzeit für die Sperre festzulegen. (3) Verwenden Sie den Befehl Del, um die Sperre zu löschen, wenn die Sperre nicht mehr benötigt wird.

Schritte zur Lösung des Problems, das Redis-Server nicht finden kann: Überprüfen Sie die Installation, um sicherzustellen, dass Redis korrekt installiert ist. Setzen Sie die Umgebungsvariablen Redis_host und Redis_port; Starten Sie den Redis-Server Redis-Server; Überprüfen Sie, ob der Server Redis-Cli Ping ausführt.

Zu den Schritten zum Starten eines Redis -Servers gehören: Installieren von Redis gemäß dem Betriebssystem. Starten Sie den Redis-Dienst über Redis-Server (Linux/macOS) oder redis-server.exe (Windows). Verwenden Sie den Befehl redis-cli ping (linux/macOS) oder redis-cli.exe ping (Windows), um den Dienststatus zu überprüfen. Verwenden Sie einen Redis-Client wie Redis-Cli, Python oder Node.js, um auf den Server zuzugreifen.
