Beispiel für einen lokalen Java-Cache-Code
In diesem Artikel wird hauptsächlich der Implementierungscode des lokalen Java-Cache vorgestellt. Der Herausgeber findet ihn recht gut. Jetzt werde ich ihn mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor, um einen Blick auf
Nutzungsszenarien
In Java
Anwendungen für Daten mit hoher Zugriffshäufigkeit und wenigen Aktualisierungen zu werfen. Die übliche Lösung ist Folgendes Der Datentyp wird dem Cache hinzugefügt. Im Vergleich zum Lesen aus der Datenbank wird die Effizienz des Lesecaches erheblich verbessert.
In einer Clusterumgebung gehören zu den häufig verwendeten verteilten Caches Redis, Memcached usw. In einigen Geschäftsszenarien ist es jedoch möglicherweise nicht erforderlich, ein komplexes verteiltes Caching-System aufzubauen. In einer eigenständigen Umgebung möchten Sie normalerweise den internen Cache (LocalCache) verwenden.
Implementierung
Hier sind zwei Implementierungen von LocalCache
, eine basiert auf Con<a href="http://www.php%20.cn%20/wiki/1046.html" target="_blank">aktuell<code> Con<a href="http://www.php.cn/wiki/1046.html" target="_blank">current</a><a href="http://www.php.cn/wiki/762.html" target="_blank">Hash</a><a href="http://www.php.cn/code/8210.html" target="_blank">Map</a>
HashLinkedHashMap
Map LRU
implementiert grundlegendes lokales Caching, und das andere basiert auf
static { timer = new Timer(); map = new ConcurrentHashMap<>(); }
ConcurrentHashMap
verwendet ConcurrentHashMap
als Cache-Speicherstruktur. Da der Thread von sicher LocalCache
ist, ist der Betrieb von JDK1.8
basierend auf dieser Implementierung in einer gleichzeitigen Umgebung mit mehreren Threads sicher. In ConcurrentHashMap
unterstützt ConcurrentHashMap
das vollständig gleichzeitige Lesen, was auch die Effizienz des lokalen Caches verbessert. Die Cache-Operation wird implementiert, indem die Operation von map
auf
Privater Konstruktor
privateLocalCache(){ }
LocalCache
Cache-Löschmechanismus
/** * 清除缓存任务类 */ static classCleanWorkerTaskextendsTimerTask{ private String key; publicCleanWorkerTask(String key){ this.key = key; } publicvoidrun(){ LocalCache.remove(key); } }
CleanWorkerTask
Das Bereinigen ungültiger Caches wird durch die Timer-Klasse implementiert. Innere Klasse erbt TimerTask
von Benutzer löscht Cache. Immer wenn ein neues
Implementierung basierend auf LinkedHashMap
LinkedHashMap
verwendet LinkedHashMap
als Cache-Speicherstruktur. Die LRU
-Strategie wird hauptsächlich durch die Zugriffssequenzfunktion von
LRU
LRU
Least Recently Used
ist die Abkürzung von
LRU-strategiebasierte Karte
LinkedHashMap
Hier verwenden wir LRU
, um map
basierend auf der LinkedHashMap
-Strategie zu implementieren. Instanziieren Sie map
, indem Sie den Konstruktor der übergeordneten Klasse accessOrder
aufrufen. Durch Setzen des Parameters true
auf LRU
wird sichergestellt, dass die
static classLRUMap<K,V>extendsLinkedHashMap<K,V>{ ... // 省略部分代码 publicLRUMap(intinitialCapacity,floatloadFactor){ super(initialCapacity, loadFactor, true); } ... // 省略部分代码 /** * 重写LinkedHashMap中removeEldestEntry方法; * 新增元素的时候,会判断当前map大小是否超过DEFAULT_MAX_CAPACITY,超过则移除map中最老的节点; * * @param eldest * @return */ protectedbooleanremoveEldestEntry(Map.Entry<K, V> eldest){ return size() > DEFAULT_MAX_CAPACITY; } }
Thread-sicher
/** * 读写锁 */ private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private final Lock rLock = readWriteLock.readLock(); private final Lock wLock = readWriteLock.writeLock();
LinkedHashMap
LRUMap
ist kein Thread-Sicherheit: Bei Verwendung in einer Multithread-Umgebung ohne Kontrolle treten Probleme auf. Daher wird in ReentrantReadWriteLock
eine
Cache-Räumungsmechanismus
protectedbooleanremoveEldestEntry(Map.Entry<K, V> eldest){ return size() > DEFAULT_MAX_CAPACITY; }
LinkedHashMap
Überschreiben Sie hier die removeEldestEntry
-Methode in map
, wenn der Cache hinzugefügt wird Element, wird ermittelt, ob die aktuelle DEFAULT_MAX_CAPACITY
-Größe
Cache-Löschmechanismus
ConcurrentHashMap
Der Cache-Löschmechanismus stimmt mit der Implementierung von timer
überein, beide werden über
1. Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen
2. Kostenloses Java-Video-Tutorial
3. YMP-Online-Handbuch
Das obige ist der detaillierte Inhalt vonBeispiel für einen lokalen Java-Cache-Code. 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



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4
