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