Стратегії кешування

Оптимізація коду в Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Що таке кешування?

Кешування — це як тримати часто вживані продукти на кухонній стільниці, а не в шафі: діставати швидше, але місця обмаль

Зазвичай кешують:

  • Результати запитів до бази даних
  • Відповіді API
  • Витратні обчислення
  • Інші ресурсоємні операції
Оптимізація коду в Java

Кеш у пам'яті в Java

// 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);
    }
}
Оптимізація коду в Java

Політики виселення з кешу

  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • FIFO (First In, First Out)
  • Часова експірація
  • Та інші
Оптимізація коду в Java

Redis для розподіленого кешування

Що таке Redis:

  • Сховище даних/кеш у пам'яті
  • Відмінно підходить як розподілений кеш
  • Підтримує багато структур даних
  • Багато клієнтських бібліотек для Java — наприклад, Jedis

Скріншот 2025-05-14 о 6.59.29 PM.png

Оптимізація коду в Java

Використання Redis з Jedis

import redis.clients.jedis.Jedis;

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

Додаткові можливості:

  • Автоматична експірація елементів у кеші
  • Підтримка кластера
Оптимізація коду в Java

Реалізація кешу з часом життя в 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);
    }
}
Оптимізація коду в Java

Підсумок

  • Кешування зберігає результати, щоб не перераховувати їх знову
  • Ефективне для дорогих операцій і часто потрібних даних
  • Налаштуйте належні політики виселення для керування пам'яттю
  • Для багатосерверних застосунків розгляньте розподілене кешування (напр., Redis з Jedis)
Оптимізація коду в Java

Давайте потренуємось!

Оптимізація коду в Java

Preparing Video For Download...