


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:
- Statische Methoden und Singletons:
scenarioBuffer
-Klasse verwendet die statische MethodegetBAsset
und die statische VariableassetBuffer
sowiegetInstance()
. 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. - Die Abhängigkeitsinjektion fehlt:
scenarioBuffer
-Instanz wird nicht die Abhängigkeitsinjektion von Spring verwendet, sonderngetInstance()
-Methode, die die Wartbarkeit und Testbarkeit des Codes verringert. - Initialisierungsmethode: Obwohl es möglich ist, den Cache mit
ApplicationRunner
zu initialisieren, ist die@PostConstruct
-Annotation oderInitializingBean
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>
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>
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!

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

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

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

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

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

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

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

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

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

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
