Heim Java javaLernprogramm Java -Cache -Datenverlust: Warum können Daten nicht aus dem Cache abgerufen werden?

Java -Cache -Datenverlust: Warum können Daten nicht aus dem Cache abgerufen werden?

Apr 19, 2025 pm 02:57 PM
tomcat 数据丢失 Federbehälter red

Java -Cache -Datenverlust: Warum können Daten nicht aus dem Cache abgerufen werden?

Java zwischengespeichertes Datenverlustproblem: Diagnose und Lösungen

In Java -Anwendungen ist das Speicher -Caching eine wichtige Strategie zur Verbesserung der Leistung. Der zwischengespeicherte Datenverlust ist jedoch ein häufiges Problem. In diesem Artikel wird eine Fallanalyse durchgeführt, um die Grundursachen von Java -zwischengespeicherten Daten eingehend zu untersuchen und effektive Optimierungslösungen bereitzustellen.

Fall Hintergrund:

In einem Projekt wird eine Klasse namens scenarioBuffer verwendet, um etwa 160.000 asset in einen HashMap zu speichern. scenarioBuffer -Klasse verwendet die @Component -Annotation und bietet eine statische Methode getBAsset für die Datenerfassung. Wenn die Anwendung startet, initialisiert scenarioBuffer den Cache über ApplicationRunner -Schnittstelle. Während des Laufs gibt die getBAsset -Methode jedoch häufig Nullwerte zurück. Noch verwirrender ist, dass der Serverspeicher dringend benötigt wird (nur 100 MB verfügbarer Speicher sind übrig, der Cache nimmt 3 GB auf und der Gesamtspeicher beträgt 8 GB). Nach dem Neustart des Servers und der Löschen des Cache wird das Problem vorübergehend gelöst.

Analyse der Grundursache des Problems:

Trotz der Zuweisung von 3 GB Speicher für Tomcat bleibt der unzureichende Serverspeicher das Hauptproblem. Wenn der Speicher nicht ausreicht, löst der JVM die Müllsammlung aus und erzwingt sogar das Abschalten, um den Speicher freizusetzen, wodurch zwischengespeicherte Daten gelöscht werden.

Codefehler:

Der ursprüngliche Code hat die folgenden Probleme:

  1. Statische Methoden und Singletons: scenarioBuffer -Klasse verwendet die statische Methode getBAsset und die statische Variable assetBuffer sowie getInstance() . In federbezogenen Bohnen ist dies völlig unnötig. Springbehälter selbst verwalten Singletons von Bohnen, statischen Methoden und Variablen erhöhen die Codekomplexität und sind schwer zu Unit -Tests.
  2. Die Abhängigkeitsinjektion fehlt: scenarioBuffer -Instanz wird nicht die Abhängigkeitsinjektion von Spring verwendet, sondern getInstance() -Methode, die die Wartbarkeit und Testbarkeit des Codes verringert.
  3. Initialisierungsmethode: Obwohl es möglich ist, den Cache mit ApplicationRunner zu initialisieren, ist die @PostConstruct -Annotation oder InitializingBean Schnittstelle klarer und einfacher zu verstehen.

Optimierungslösung:

Es wird empfohlen, die Abhängigkeitsinjektion von Spring und @PostConstruct -Annotationsoptimierungscode zu verwenden:

Modifizierte scenarioBuffer :

 @Komponente
öffentliche Klassenszenariobuffer implementiert IActionListener {

    @Autowired
    privates iasetService Assetservice;

    Private Karte <string list> > assetBuffer = new HashMap  ();

    @Postconstruct
    public void init () {
        Liste<asset> assetList = assetService.list ();
        assetBuffer.put ("key", assetlist); // Hier müssen Sie den Schlüssel gemäß der tatsächlichen Situation ändern
    }

    Öffentliche Liste<asset> getBasset (String GroupID) {
        return assetBuffer.get (GroupID);
    }
}</asset></asset></string>
Nach dem Login kopieren

In der Klasse, die Cache verwenden muss, injizieren Sie scenarioBuffer -Instanz durch @Autowired :

 @Service
öffentliche Klasse XXXService {
    @Autowired
    private Szenariobuffer -Szenariobuffer;

    public void xxx () {
        Liste<asset> Asset = szenariobuffer.getBasset ("xxx"); // Hier müssen Sie die Gruppe ID gemäß der tatsächlichen Situation ändern
        // ...
    }
}</asset>
Nach dem Login kopieren

Diese Modifikationen machen den Code präzise, ​​leicht zu pflegen und zu testen und vermeiden Probleme, die durch statische Methoden und Variablen verursacht werden.

Darüber hinaus müssen Sie auf die Serverspeicherverwendung achten. Wenn der Speicher häufig nicht ausreicht, erwägen Sie, den Serverspeicher zu erhöhen oder Programme zu optimieren, um den Speicherverbrauch zu verringern. Obwohl Redis vorerst im Fall nicht berücksichtigt wird, kann die Verwendung verteilter Caches wie Redis auf lange Sicht effektiv den Speicherdruck lindern und die Leistung verbessern.

Das obige ist der detaillierte Inhalt vonJava -Cache -Datenverlust: Warum können Daten nicht aus dem Cache abgerufen werden?. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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 aktualisieren Sie das Bild von Docker So aktualisieren Sie das Bild von Docker Apr 15, 2025 pm 12:03 PM

Die Schritte zur Aktualisierung eines Docker -Images sind wie folgt: Ziehen Sie das neueste Bild -Tag. Neues Bild Löschen Sie das alte Bild für ein bestimmtes Tag (optional) den Container neu (falls erforderlich) neu starten Sie neu (falls erforderlich).

Was sind die häufigen Missverständnisse in der CentOS -HDFS -Konfiguration? Was sind die häufigen Missverständnisse in der CentOS -HDFS -Konfiguration? Apr 14, 2025 pm 07:12 PM

HSDFS -Konfiguration (Hadoop Distributed Datei Systems) im Unter -CentOS beim Aufbau eines Hadoophdfs -Clusters auf CentOS, einige häufige Missverständnisse können zu einer Verschlechterung der Leistung, dem Datenverlust und sogar der Cluster können nicht starten. Dieser Artikel fasst diese häufigen Probleme und ihre Lösungen zusammen, um diese Fallstricke zu vermeiden und die Stabilität und den effizienten Betrieb Ihres HDFS -Clusters zu gewährleisten. Fehlerbewusstseinsfehler: Problem: Problem: Rackbewusstliche Informationen werden nicht korrekt konfiguriert, was zu einer ungleichmäßigen Verteilung der Datenblock-Replikas und der Erhöhung der Netzwerkbelastung führt. Lösung: Überprüfen Sie die rackbewusste Konfiguration in der Datei HDFS-site.xml und verwenden Sie HDFSDFSAdmin-Printtopo

CentOS stoppt die Wartung 2024 CentOS stoppt die Wartung 2024 Apr 14, 2025 pm 08:39 PM

CentOS wird 2024 geschlossen, da seine stromaufwärts gelegene Verteilung RHEL 8 geschlossen wurde. Diese Abschaltung wirkt sich auf das CentOS 8 -System aus und verhindert, dass es weiterhin Aktualisierungen erhalten. Benutzer sollten eine Migration planen, und empfohlene Optionen umfassen CentOS Stream, Almalinux und Rocky Linux, um das System sicher und stabil zu halten.

Welche Schritte sind erforderlich, um CentOs in HDFs zu konfigurieren Welche Schritte sind erforderlich, um CentOs in HDFs zu konfigurieren Apr 14, 2025 pm 06:42 PM

Das Erstellen eines Hadoop -verteilten Dateisystems (HDFS) auf einem CentOS -System erfordert mehrere Schritte. Dieser Artikel enthält einen kurzen Konfigurationshandbuch. 1. Bereiten Sie sich auf die Installation von JDK in der frühen Stufe vor: Installieren Sie JavadevelopmentKit (JDK) auf allen Knoten, und die Version muss mit Hadoop kompatibel sein. Das Installationspaket kann von der offiziellen Oracle -Website heruntergeladen werden. Konfiguration der Umgebungsvariablen: Bearbeiten /etc /Profildatei, setzen Sie Java- und Hadoop -Umgebungsvariablen, damit das System den Installationspfad von JDK und Hadoop ermittelt. 2. Sicherheitskonfiguration: SSH-Kennwortfreie Anmeldung zum Generieren von SSH-Schlüssel: Verwenden Sie den Befehl ssh-keygen auf jedem Knoten

So konfigurieren Sie langsame Abfragebogin in CentOS Redis So konfigurieren Sie langsame Abfragebogin in CentOS Redis Apr 14, 2025 pm 04:54 PM

Aktivieren Sie Redis langsame Abfrageprotokolle im CentOS -System, um die Leistungsdiagnoseeffizienz zu verbessern. In den folgenden Schritten führen Sie die Konfiguration durch: Schritt 1: Suchen und bearbeiten Sie die Redis -Konfigurationsdatei zuerst und suchen Sie die Redis -Konfigurationsdatei, die sich normalerweise in /etc/redis/redis.conf befindet. Öffnen Sie die Konfigurationsdatei mit dem folgenden Befehl: Sudovi/etc/redis/redis.conf Schritt 2: Passen Sie die Langsame-Abfrage-Protokollparameter in der Konfigurationsdatei an, suchen Sie die folgenden Parameter: #Slow Query-Schwellenwert (MS) Slow-Log-Slow-Than10000 #Maximum der Einträge für langsame Query-Log-Logog-Logog-Len-Len-Len

Welche Dateien müssen Sie in HDFS -Konfigurations -CentOS ändern? Welche Dateien müssen Sie in HDFS -Konfigurations -CentOS ändern? Apr 14, 2025 pm 07:27 PM

Beim Konfigurieren von Hadoop-Distributed Dateisystem (HDFS) auf CentOS müssen die folgenden Schlüsselkonfigurationsdateien geändert werden: Core-Site.xml: Fs.DefaultFs: Gibt die Standarddateisystemadresse von HDFs an, wie z. B. HDFS: // localhost: 9000. Hadoop.tmp.dir: Gibt das Speicherverzeichnis für Hadoop -temporäre Dateien an. Hadoop.proxyuser.root.hosts und Hadoop.proxyuser.ro

CentOS Stream 8 Fehlerbehebungsmethoden CentOS Stream 8 Fehlerbehebungsmethoden Apr 14, 2025 pm 04:33 PM

CentosStream8 -System -Fehlerbehebungshandbuch Dieser Artikel bietet systematische Schritte, mit denen Sie effektiv Centosstream8 -Systemausfälle beheben können. Bitte versuchen Sie die folgenden Methoden in der Reihenfolge: 1. Netzwerkverbindungstest: Verwenden Sie den Befehl ping, um die Netzwerkkonnektivität zu testen (z. B. pinggoogle.com). Verwenden Sie den Befehl curl, um die HTTP -Anforderungsantwort zu überprüfen (z. B. Curlgoogle.com). Verwenden Sie den Befehl iPlink, um den Status der Netzwerkschnittstelle anzuzeigen und zu bestätigen, ob die Netzwerkschnittstelle normal arbeitet und verbunden ist. 2. Überprüfung der IP -Adresse und Gateway -Konfiguration: Verwenden Sie iPadDR oder ifConfi

Tipps zur Verwendung von HDFS -Dateisystem auf CentOS Tipps zur Verwendung von HDFS -Dateisystem auf CentOS Apr 14, 2025 pm 07:30 PM

Das Installations-, Konfigurations- und Optimierungshandbuch für das HDFS -Dateisystem unter CentOS -System In diesem Artikel wird die Installation, Konfiguration und Optimierung von Hadoop Distributed Dateisystem (HDFS) auf CentOS -System geleitet. HDFS -Installation und Konfiguration Java -Umgebung Installation: Stellen Sie zunächst sicher, dass die entsprechende Java -Umgebung installiert ist. Bearbeiten/etc/Profildatei, Folgendes hinzufügen und /usr/lib/java-1.8.0/jdk1.8.0_144 mit Ihrem tatsächlichen Java-Installationspfad: exportjava_home =/usr/lib/java-1.8.0/jdk1.8.0_144144141441444 = $ java-1.8.0/Jdk1.8.0_144444 = $ Java-1. Java-1 $ Java-1.8.8.0_14444, ersetzen

See all articles