Bibliothèque de cache Java et politique d'éviction

TL;DR

Eviction?

Expulsion signifie «expulsion» en japonais.

Dans le contexte de la mise en cache, lorsque vous essayez de stocker de nouvelles données au-delà de ce que le cache peut contenir, vous êtes traité avec la stratégie "Quelles données dois-je effacer pour obtenir plus d'espace à stocker dans le nouveau cache?" ..

La limite supérieure indiquée par «dépassement de la capacité pouvant être conservée dans le cache» est le nombre d’entrées à conserver dans le cache, la taille de l’objet et le paramètre de la limite supérieure varie en fonction du produit qui gère le cache.

Veuillez noter qu'il est différent de Expire.

Politique d'expulsion typique

Si vous regardez Wikipédia, vous trouverez un exemple de politique d'expulsion.

[Algorithme de cache](https://ja.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)

Par exemple, LRU, LFU, ARC, etc.

Endroit célèbre

LRU(Least Recently Used)

LRU est un algorithme qui cible les données les moins utilisées pour la suppression.

C'est un algorithme très célèbre et facile à comprendre, mais par exemple, dans le cas de l'accès à la plupart des données stockées dans le cache car il s'agit d'un traitement par lots, il peut ne pas être une utilisation très efficace du cache.

LFU(Least Frequently Used)

LFU est un algorithme qui maintient la fréquence d'accès aux données et cible les données rarement utilisées pour la suppression.

Politique d'éviction implémentée dans la bibliothèque de cache de Java

Caffeine

De Caffeine, un endroit récemment célèbre.

Caffeine est une bibliothèque de cache inspirée de Google Guava Cache.

La politique d'expulsion mise en œuvre dans la caféine est TinyLFU.

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

Efficiency

Ehcache 3

À l'époque d'Ehcache 2, la bibliothèque de cache en Java était Ehcache, mais maintenant il semble que je n'en ai pas beaucoup entendu parler.

Dans Ehcache 3, la politique d'expulsion a disparu. Cela semble être la conclusion qu'il est difficile d'implémenter efficacement l'expulsion dans les situations où il existe des destinations de stockage telles que le tas et hors tas.

How to specify ehcache3 eviction strategy when cache is full ?

À propos, à l'époque d'Ehcache 2.x, il y avait LRU, LFU et FIFO.

Built-in Memory Store Eviction Algorithms

Même avec Ehcache 3, il semble que si vous créez un conseiller d'expulsion, vous pouvez le contrôler au niveau de la couche de persistance. Cela mène à l'histoire de la destination de sauvegarde.

Eviction Advisor

En d'autres termes, créons-le nous-mêmes en fonction de la destination où l'entrée du cache est enregistrée.

Google Guava Cache

Le dernier est Google Guava Cache. Maintenant que la caféine est arrivée, vous ne pouvez plus l'utiliser.

Dans le cas de Guava's Cache, vous pouvez définir l'expulsion par taille, heure et référence (bien qu'il y en ait qui disent expulsion mais expirent?).

CachesExplained / Eviction

Parmi ceux-ci, utiliser SoftReference comme référence semble être un sentiment LRU.

Pour le moment

Je pense que c'est une bonne idée de garder ces informations comme point de départ.

Recommended Posts

Bibliothèque de cache Java et politique d'éviction
Java et JavaScript
XXE et Java
Bibliothèque de mesures de couverture Java
Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11
Getter et Setter (Java)
[Java] Thread et exécutable
Java vrai et faux
[Java] Comparaison des chaînes de caractères et && et ||
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
Bibliothèque de cartes bidirectionnelles Java
timedatectl et Java TimeZone
[Java] Branchement et répétition
Bibliothèque Java CSV "opencsv"
Bibliothèque d'arborescence Java
[Java] Types de variables et types
java (classe et instance)
[Java] Surcharge et remplacement
Défis et recherche alternative de la bibliothèque de communication série Java RXTX
Etudier Java # 2 (\ marque et opérateur)
Java version 8 et fonctionnalités ultérieures
[Java] Différence entre == et égal
[Java] Zone de pile et zone statique
[Java] Classe générique et méthode générique
Programmation Java (variables et données)
Cryptage et décryptage Java PDF
Java et Iterator Part 1 External Iterator Edition
Instructions Java if et switch
[Design pattern] Bibliothèque de base Java
Définition et instanciation de classe Java
Apache Hadoop et Java 9 (partie 1)
[Java] HashCode et remplacement égal
☾ Instruction Java / Repeat et instruction de contrôle de répétition
Méthodes Java et surcharges de méthodes
java Generics T et? Différence
Avantages et inconvénients de Java
java (branchement conditionnel et répétition)
À propos du package Java et de l'importation
[Java] Téléchargez une image et convertissez-la en Base64
Histoire de remplacement C # et Java
Méthodes et classes abstraites Java
Instructions Java while et for
Encapsulation Java et getters et setters