Strategie buforowania

Optymalizacja kodu w Javie

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Czym jest buforowanie?

Buforowanie przypomina trzymanie często używanych składników na blacie kuchennym zamiast w szafce – dostęp jest szybszy, ale miejsca jest mniej

Najczęściej buforowane są:

  • Wyniki zapytań do bazy danych
  • Odpowiedzi API
  • Kosztowne obliczenia
  • Inne operacje wymagające dużych zasobów
Optymalizacja kodu w Javie

Buforowanie w pamięci w Javie

// In-memory cache using 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);
    }
}
Optymalizacja kodu w Javie

Zasady eksmisji z bufora

  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • FIFO (First In, First Out)
  • Wygasanie czasowe
  • I inne!
Optymalizacja kodu w Javie

Redis jako rozproszony bufor

Czym jest Redis:

  • Magazyn danych / bufor w pamięci
  • Doskonały jako rozproszony bufor
  • Obsługuje wiele struktur danych
  • Wiele bibliotek klienckich dla Javy – przykład: Jedis

Zrzut ekranu przedstawiający logo Redis

Optymalizacja kodu w Javie

Korzystanie z Redis z Jedis

import redis.clients.jedis.Jedis;

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

Dodatkowe funkcje:

  • Automatyczne wygasanie elementów bufora
  • Obsługa klastrów
Optymalizacja kodu w Javie

Implementacja bufora czasowego z 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) {
        // Sets both the value and expiration time in seconds
        jedis.setex(key, timeToLiveSeconds, value);
    }
}
Optymalizacja kodu w Javie

Podsumowanie

  • Buforowanie przechowuje wyniki obliczeń, aby unikać ich powtarzania
  • Skuteczne dla kosztownych operacji i często używanych danych
  • Stosować odpowiednie zasady eksmisji, aby zarządzać pamięcią
  • Rozważyć rozproszony bufor dla aplikacji wieloserwerowych (np. Redis z Jedis)
Optymalizacja kodu w Javie

Czas na ćwiczenia!

Optymalizacja kodu w Javie

Preparing Video For Download...