Inhaltsverzeichnis
Szeneneinstellung
Wir haben festgestellt, dass das Obige viele nutzlose Daten enthält und die Attributnamen nicht gespeichert werden müssen. " >{"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 3 – Optimierte Datentypen
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.
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.
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.
Heim Datenbank Redis So optimieren Sie den Redis-Cache-Speicherplatz

So optimieren Sie den Redis-Cache-Speicherplatz

May 27, 2023 pm 11:44 PM
redis

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 verwenden
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){         
        //具体的数据类型会丢失,需要做处理
    }
}
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.

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�VERARBEITUNG

Als 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");
Nach dem Login kopieren

Nach der manuellen Anpassung wurde ein kleinerer Datentyp anstelle des String-Typs verwendet, Drucken

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());
Nach dem Login kopieren
System.out.println(JSON.toJSONString(pojo.toValueArray()).length());
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

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

So verwenden Sie den Befehl Redis So verwenden Sie den Befehl Redis Apr 10, 2025 pm 08:45 PM

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).

So sehen Sie alle Schlüssel in Redis So sehen Sie alle Schlüssel in Redis Apr 10, 2025 pm 07:15 PM

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.

So implementieren Sie die zugrunde liegenden Redis So implementieren Sie die zugrunde liegenden Redis Apr 10, 2025 pm 07:21 PM

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.

So implementieren Sie Redis -Zähler So implementieren Sie Redis -Zähler Apr 10, 2025 pm 10:21 PM

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.

So verwenden Sie Redis Lock So verwenden Sie Redis Lock Apr 10, 2025 pm 08:39 PM

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.

Was tun, wenn Redis-Server nicht gefunden werden kann Was tun, wenn Redis-Server nicht gefunden werden kann Apr 10, 2025 pm 06:54 PM

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.

So starten Sie den Server mit Redis So starten Sie den Server mit Redis Apr 10, 2025 pm 08:12 PM

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.

See all articles