Estratégias de cache

Otimização de Código em Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

O que é cache?

Cache é como deixar os ingredientes mais usados no balcão da cozinha, em vez do armário — o acesso é mais rápido, mas o espaço é limitado

Normalmente fazemos cache de:

  • Resultados de consultas a banco de dados
  • Respostas de API
  • Cálculos custosos
  • Outras operações intensivas em recursos
Otimização de Código em Java

Cache em memória no Java

// Cache em memória usando 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);
    }
}
Otimização de Código em Java

Políticas de expulsão de cache

  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • FIFO (First In, First Out)
  • Expiração por tempo
  • E mais!
Otimização de Código em Java

Redis para cache distribuído

O que é Redis:

  • Armazenamento/cache de dados em memória
  • Excelente como cache distribuído
  • Suporta muitas estruturas de dados
  • Muitos clientes Java — por exemplo, Jedis

Captura de tela 2025-05-14 às 18:59:29.png

Otimização de Código em Java

Usando Redis com Jedis

import redis.clients.jedis.Jedis;

// Usando o cliente Jedis
Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");

Recursos adicionais:

  • Expiração automática de itens no cache
  • Suporte a cluster
Otimização de Código em Java

Implementando cache por tempo com 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) {
        // Define o valor e o tempo de expiração em segundos
        jedis.setex(key, timeToLiveSeconds, value);
    }
}
Otimização de Código em Java

Resumo

  • Cache armazena resultados computados para evitar recálculo
  • Eficaz para operações caras e dados acessados com frequência
  • Aplique políticas de expulsão adequadas para gerir memória
  • Considere cache distribuído em apps com vários servidores (ex.: Redis com Jedis)
Otimização de Código em Java

Vamos praticar!

Otimização de Código em Java

Preparing Video For Download...