Java-Cache-Bibliothek und Räumungsrichtlinie

TL;DR

Eviction?

Räumung bedeutet auf Japanisch "Vertreibung".

Wenn Sie im Zusammenhang mit dem Caching versuchen, neue Daten zu speichern, die über den Cache hinausgehen, werden Sie mit der Strategie "Welche Daten sollte ich löschen, um mehr Speicherplatz im neuen Cache zu erhalten?" Behandelt. ..

Die Obergrenze, die durch "Überschreiten der Kapazität, die im Cache gehalten werden kann" angegeben wird, ist die Anzahl der Einträge, die im Cache gehalten werden sollen, die Größe des Objekts und die Einstellung der Obergrenze hängt vom Produkt ab, das den Cache verwaltet.

Bitte beachten Sie, dass es sich von Expire unterscheidet.

Typische Räumungsrichtlinie

Wenn Sie sich Wikipedia ansehen, finden Sie ein Beispiel für eine Räumungsrichtlinie.

[Cache-Algorithmus](https://en.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3% 82% A2% E3% 83% AB% E3% 82% B4% E3% 83% AA% E3% 82% BA% E3% 83% A0)

Zum Beispiel LRU, LFU, ARC usw.

Berühmter Platz

LRU(Least Recently Used)

LRU ist ein Algorithmus, der auf die am wenigsten verwendeten Daten zum Löschen abzielt.

Es ist ein sehr bekannter und leicht verständlicher Algorithmus, aber wenn beispielsweise auf die meisten im Cache gespeicherten Daten zugegriffen wird, weil es sich um einen Stapelprozess handelt, ist der Cache möglicherweise nicht sehr effizient.

LFU(Least Frequently Used)

LFU ist ein Algorithmus, der die Häufigkeit des Datenzugriffs beibehält und auf selten verwendete Daten zum Löschen abzielt.

In der Java-Cache-Bibliothek implementierte Räumungsrichtlinie

Caffeine

Aus Koffein, einem kürzlich berühmten Ort.

Koffein ist eine Cache-Bibliothek, die von Google Guava Cache inspiriert wurde.

Die in Koffein implementierte Räumungsrichtlinie lautet TinyLFU.

Caffeine uses the Window TinyLfu policy due to its high hit rate and low memory footprint.

Efficiency

Ehcache 3

Zum Zeitpunkt von Ehcache 2 war die Cache-Bibliothek in Java Ehcache, aber jetzt scheint es, dass ich nicht viel darüber gehört habe.

In Ehcache 3 ist die Räumungsrichtlinie weg. Es scheint die Schlussfolgerung zu sein, dass es schwierig ist, Eviction in Situationen, in denen Speicherziele wie Heap und Off-Heap vorhanden sind, effizient zu implementieren.

How to specify ehcache3 eviction strategy when cache is full ?

Um die Zeit von Ehcache 2.x gab es übrigens LRU, LFU und FIFO.

Built-in Memory Store Eviction Algorithms

Selbst mit Ehcache 3 können Sie es anscheinend auf der Persistenz-Ebene steuern, indem Sie einen Räumungsberater erstellen. Dies führt zur Geschichte über das Speicherziel.

Eviction Advisor

Mit anderen Worten, machen wir es uns selbst entsprechend dem Ziel, den Cache-Eintrag zu speichern.

Google Guava Cache

Der letzte ist Google Guava Cache. Jetzt, wo Koffein angekommen ist, dürfen Sie es nicht mehr verwenden.

Im Fall von Guavas Cache können Sie die Räumung nach Größe, Zeit und Referenz festlegen (obwohl es einige gibt, die Räumung sagen, aber ablaufen?).

CachesExplained / Eviction

Von diesen scheint die Verwendung von SoftReference als Referenz ein LRU-Gefühl zu sein.

Vorerst

Ich denke, es ist eine gute Idee, diese Informationen als Ausgangspunkt zu behalten.

Recommended Posts

Java-Cache-Bibliothek und Räumungsrichtlinie
Java und JavaScript
XXE und Java
Bibliothek zur Messung der Java-Abdeckung
Verwenden Sie die schnelle Mapping-Bibliothek MapStruct mit Lombok und Java 11
Getter und Setter (Java)
[Java] Thread und ausführbar
Java wahr und falsch
[Java] Vergleich von Zeichenketten und && und ||
Java - Serialisierung und Deserialisierung
[Java] Argumente und Parameter
Bidirektionale Java-Kartenbibliothek
timedatectl und Java TimeZone
[Java] Verzweigen und Wiederholen
Java CSV Bibliothek "opencsv"
Java-Baumstrukturbibliothek
[Java] Variablen- und Typtypen
Java (Klasse und Instanz)
[Java] Überladen und überschreiben
Herausforderungen und alternative Forschung der Java Serial Communication Library RXTX
Studiere Java # 2 (\ mark and operator)
Java Version 8 und neuere Funktionen
[Java] Unterschied zwischen == und gleich
[Java] Stapelbereich und statischer Bereich
[Java] Generics-Klasse und Generics-Methode
Java-Programmierung (Variablen und Daten)
Java-Ver- und Entschlüsselung PDF
Java und Iterator Teil 1 Externe Iterator Edition
Java if- und switch-Anweisungen
[Entwurfsmuster] Java-Kernbibliothek
Definition und Instanziierung von Java-Klassen
Apache Hadoop und Java 9 (Teil 1)
[Java] HashCode und gleich Überschreibung
☾ Java / Repeat-Anweisung und Repeat-Steueranweisung
Java-Methoden und Methodenüberladungen
Java Generics T und? Unterschied
Vor- und Nachteile von Java
Java (bedingte Verzweigung und Wiederholung)
Über Java-Paket und Import
[Java] Laden Sie ein Bild hoch und konvertieren Sie es in Base64
C # und Java überschreiben Story
Java abstrakte Methoden und Klassen
Java während und für Anweisungen
Java-Kapselung und Getter und Setter