"Existem apenas dois problemas difíceis na Ciência da Computação: invalidação de cache e nomes de coisas."
Phil Karlton
Existe uma solução ou método geral para invalidar um cache; saber quando uma entrada está desatualizada, para que você tenha a garantia de sempre obter dados atualizados?
Por exemplo, considere uma função getData()
que obtém dados de um arquivo. Ele armazena em cache com base na hora da última modificação do arquivo, que verifica toda vez que é chamado.
Em seguida, você adiciona uma segunda função transformData()
que transforma os dados e armazena em cache seu resultado para a próxima vez que a função for chamada. Ele não tem conhecimento do arquivo - como você adiciona a dependência de que, se o arquivo for alterado, esse cache se torne inválido?
Você poderia chamar getData()
toda vez que transformData()
for chamado e compará-lo com o valor que foi usado para construir o cache, mas isso poderia acabar sendo muito caro.
"The two hardest things in Computer Science are cache invalidation, naming things, and off-by-one errors."