Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Cache vai Crescer indefinidamente pra sempre?

Olá, me surgiu uma dúvida quanto ao uso do cache de segundo nível. No lugar de ajudar ele pode se tornar motivo de dor e cabeça, vejamos bem se vc acessa o produto "livro de arquitetura e design" ele armazena o produto no cache, ai depois você acessa o produto "flauta doce", ele armazena a flauta doce no cache, vc continua navegando no site e adiciona o "curso de violão", então é adicionado o curso de violão no cache de segundo nível, agora imagina um site com muitos produtos, vai chegar uma hora que este cache vai estar gigante, pelo menos foi oque constatei com um código simples:

public class TestaCache {

    public static void main(String[] args) {
        EntityManager em1 = JPAUtil.criaEntityManager();
        EntityManager em2 = JPAUtil.criaEntityManager();

        System.out.println("realiza um select para recuperar o menu");
        Menu m1 = em1.find(Menu.class, 2L);
        System.out.println("em2 não realiza a busca pois o menu já está no cache");
        Menu m2 = em2.find(Menu.class, 2L);
        System.out.println("realiza uma outra busca para recuperar outro menu");
        Menu m3 = em1.find(Menu.class, 5L);
        System.out.println("em2 não realiza a busca pois o outro menu já está no cache");
        Menu m4 =  em2.find(Menu.class, 5L);
        System.out.println("recupera novamente o primeiro menu, não realiza a busca pois já está no cache");
        Menu m5 = em2.find(Menu.class, 2L);
        System.out.println("pra cada menu que eu acessar ,vai para o cache, isso vai crescer indefinidamente?");    
    }
}

Este é mesmo o comportamento? se for isso é um pouco problemático, como fazer para contornar esta situação e não ter caches gigantescos?

2 respostas
solução!

boa tarde Ricardo, realmente isso acontece! Pra isso precisamos pensar em como invalidar o cache. Imagina uma loja virtual bem acessada, se cada vez que entrar um usuário a aplicação fizer um select na base para buscar os produtos! Nesse caso colocamos os produtos ou a própria query em cache, mas algum desses produtos podem sair do estoque, logo devemos pensar em uma estratégia de invalidação, como de 1 em 1 hora ou quando acabar um certo produto, vai depender do seu negócio

olá Guilherme, correto, mas podemos configurar esse tempo de invalidação do cache no próprio eh-cache? pois no curso a questão de invalidação do cache não foi tratada. Onde podemos configurar?