Estrategias de caché

Optimizing Code in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

¿Qué es la caché?

Hacer caché es como dejar a mano en la encimera los ingredientes que más usas en vez de guardarlos en el armario: accedes más rápido, pero el espacio es limitado

Solemos almacenar en caché:

  • Resultados de consultas a la base de datos
  • Respuestas de API
  • Cálculos costosos
  • Otras operaciones intensivas en recursos
Optimizing Code in Java

Caché en memoria en 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);
    }
}
Optimizing Code in Java

Políticas de expulsión de caché

  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • FIFO (First In, First Out)
  • Expiración basada en tiempo
  • ¡Y más!
Optimizing Code in Java

Redis para caché distribuida

Qué es Redis:

  • Almacén de datos/caché en memoria
  • Destaca como caché distribuida
  • Admite muchas estructuras de datos
  • Muchas librerías cliente para Java; por ejemplo, Jedis

Captura de pantalla 2025-05-14 a las 18:59:29.png

Optimizing Code in Java

Uso de Redis con Jedis

import redis.clients.jedis.Jedis;

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

Funciones adicionales:

  • Expiración automática de elementos en caché
  • Soporte de clúster
Optimizing Code in Java

Implementar una caché por tiempo con 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);
    }
}
Optimizing Code in Java

Resumen

  • La caché guarda resultados para evitar recálculos
  • Eficaz para operaciones costosas y datos de acceso frecuente
  • Aplica políticas de expulsión adecuadas para gestionar memoria
  • Considera caché distribuida para apps multiserver (p. ej., Redis con Jedis)
Optimizing Code in Java

¡Vamos a practicar!

Optimizing Code in Java

Preparing Video For Download...