Stratégies de mise en cache

Optimiser le code en Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Qu'est-ce que la mise en cache ?

La mise en cache, c'est comme garder sur le comptoir les ingrédients qu'on utilise souvent : accès plus rapide, mais espace limité

On met souvent en cache :

  • Résultats de requêtes à la base de données
  • Réponses d'API
  • Calculs coûteux
  • Autres opérations gourmandes en ressources
Optimiser le code en Java

Mise en cache en mémoire en Java

// Cache en mémoire avec HashMap
public class SimpleCache<K, V> {
    private final Map<K, V> cache = new HashMap<>();

    public V get(K key) {
        return cache.get(key);
    }

    public void put(K key, V value) {
        cache.put(key, value);
    }
}
Optimiser le code en Java

Politiques d'éviction du cache

  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • FIFO (First In, First Out)
  • Expiration basée sur le temps
  • Et plus encore !
Optimiser le code en Java

Redis pour la mise en cache distribuée

Qu'est-ce que Redis :

  • Magasin de données/mémoire cache en mémoire
  • Excellent comme cache distribué
  • Prend en charge plusieurs structures de données
  • Plusieurs bibliothèques clientes Java ; par exemple, Jedis

Capture d'écran du 2025-05-14 à 18 h 59 min 29 s.png

Optimiser le code en Java

Utiliser Redis avec Jedis

import redis.clients.jedis.Jedis;

// Utilisation du client Jedis
Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");

Fonctionnalités supplémentaires :

  • Expiration automatique des éléments en cache
  • Prise en charge des grappes (cluster)
Optimiser le code en Java

Implémenter un cache basé sur le temps avec Redis

public class RedisTimedCache {
    private final Jedis jedis;

    public RedisTimedCache(String host, int port) {
        this.jedis = new Jedis(host, port);
    }

    public String get(String key) {
        return jedis.get(key);
    }

    public void put(String key, String value, int timeToLiveSeconds) {
        // Définit la valeur et le délai d'expiration en secondes
        jedis.setex(key, timeToLiveSeconds, value);
    }
}
Optimiser le code en Java

Résumé

  • La mise en cache conserve des résultats calculés pour éviter de recalculer
  • Efficace pour les opérations coûteuses et les données très consultées
  • Appliquez des politiques d'éviction adéquates pour gérer la mémoire
  • Envisagez un cache distribué pour les applis multi-serveurs (p. ex. Redis avec Jedis)
Optimiser le code en Java

Passons à la pratique !

Optimiser le code en Java

Preparing Video For Download...