Caching-Strategien

Codeoptimierung in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Was ist Caching?

Caching ist wie oft genutzte Zutaten auf der Arbeitsplatte statt im Schrank zu lagern – schneller griffbereit, aber mit wenig Platz

Wir cachen typischerweise:

  • Ergebnisse von Datenbankabfragen
  • API-Antworten
  • Teure Berechnungen
  • Andere ressourcenintensive Vorgänge
Codeoptimierung in Java

In-Memory-Caching in Java

// In-Memory-Cache mit 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);
    }
}
Codeoptimierung in Java

Cache-Eviction-Richtlinien

  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • FIFO (First In, First Out)
  • Zeitbasierte Ablaufsteuerung
  • Und mehr!
Codeoptimierung in Java

Redis für verteiltes Caching

Was ist Redis:

  • In-Memory-Datenspeicher/-Cache
  • Hervorragend als verteilter Cache
  • Unterstützt viele Datenstrukturen
  • Viele Java-Clientbibliotheken – z. B. Jedis

Screenshot 2025-05-14 at 6.59.29 PM.png

Codeoptimierung in Java

Redis mit Jedis verwenden

import redis.clients.jedis.Jedis;

// Verwendung des Jedis-Clients
Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");

Weitere Funktionen:

  • Automatisches Ablaufen von Cache-Einträgen
  • Cluster-Unterstützung
Codeoptimierung in Java

Zeitbasierten Cache mit Redis implementieren

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) {
        // Setzt sowohl den Wert als auch die Ablaufzeit in Sekunden
        jedis.setex(key, timeToLiveSeconds, value);
    }
}
Codeoptimierung in Java

Zusammenfassung

  • Caching speichert berechnete Ergebnisse, um Neuberechnung zu vermeiden
  • Effektiv für teure Operationen und häufig genutzte Daten
  • Setze sinnvolle Eviction-Regeln, um Speicher zu steuern
  • Erwäge verteiltes Caching für Multi-Server-Apps (z. B. Redis mit Jedis)
Codeoptimierung in Java

Lass uns üben!

Codeoptimierung in Java

Preparing Video For Download...