Heim > Java > javaLernprogramm > Beispiel für einen lokalen Java-Cache-Code

Beispiel für einen lokalen Java-Cache-Code

Y2J
Freigeben: 2017-05-15 09:50:12
Original
2393 Leute haben es durchsucht

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="//m.sbmmt.com/wiki/1046.html" target="_blank">current</a><a href="//m.sbmmt.com/wiki/762.html" target="_blank">Hash</a><a href="//m.sbmmt.com/code/8210.html" target="_blank">Map</a> HashLinkedHashMap Map LRU implementiert grundlegendes lokales Caching, und das andere basiert auf

, um Lokaler Richtlinien-Cache.

Implementierung basierend auf ConcurrentHashMap


static {
  timer = new Timer();
  map = new ConcurrentHashMap<>();
}
Nach dem Login kopieren

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

aufgerufen wird.

Privater Konstruktor


privateLocalCache(){

}
Nach dem Login kopieren

LocalCache

ist eine Utility-Klasse mit einem privaten Konstruktor Strengthen nicht instanziierbare Fähigkeiten.

Cache-Löschmechanismus


/**
 * 清除缓存任务类
 */
 static classCleanWorkerTaskextendsTimerTask{

   private String key;

   publicCleanWorkerTask(String key){
     this.key = key;
   }

   publicvoidrun(){
     LocalCache.remove(key);
   }
 }
Nach dem Login kopieren

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

-Element hinzufügt, wird timer.schedule aufgerufen, um die Aufgabe zum Löschen des Caches zu laden.

Implementierung basierend auf LinkedHashMap

LinkedHashMap verwendet LinkedHashMap als Cache-Speicherstruktur. Die LRU -Strategie wird hauptsächlich durch die Zugriffssequenzfunktion von

implementiert.

LRU

LRU Least Recently Used ist die Abkürzung von

, was bedeutet, dass es in letzter Zeit nicht verwendet wurde. Der LRU-Cache verwendet diesen Algorithmus, um alte Datenelemente im Cache zu entfernen und so den Speicherplatz zu optimieren.

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

-Strategie umgesetzt werden kann.


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;
    }

  }
Nach dem Login kopieren

Thread-sicher


/**
 * 读写锁
 */
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

private final Lock rLock = readWriteLock.readLock();

private final Lock wLock = readWriteLock.writeLock();
Nach dem Login kopieren

LinkedHashMap LRUMap ist kein Thread-Sicherheit: Bei Verwendung in einer Multithread-Umgebung ohne Kontrolle treten Probleme auf. Daher wird in ReentrantReadWriteLock eine

Lese-/Schreibsperre eingeführt, um Parallelitätsprobleme zu kontrollieren.

Cache-Räumungsmechanismus


protectedbooleanremoveEldestEntry(Map.Entry<K, V> eldest){
  return size() > DEFAULT_MAX_CAPACITY;
}
Nach dem Login kopieren

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

überschreitet, und wenn sie größer ist, wird der älteste Knoten in der Karte entfernt.

Cache-Löschmechanismus

ConcurrentHashMap Der Cache-Löschmechanismus stimmt mit der Implementierung von timer überein, beide werden über

implementiert.

【Verwandte Empfehlungen】

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!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage