Como posso fazer uma boa e
Independente da linguagem, mais cedo ou mais tarde no desenvolvimento teremos que lidar com cache. Com o crescimento do negócio é inevitável ter um número grande de acessos. E não da pra ficar escalando infinitamente a infra da aplicação ou do banco.
Cache
Cache é um mecanismo de armazenamento usado para reduzir os tempos de acesso aos dados. Funciona armazenando dados previamente acessados e/ou processados em um local de memória de acesso rápido, de modo que eles possam ser recuperados mais rapidamente quando necessário. Isso permite que os usuários obtenham os dados que eles precisam imediatamente, sem ter que esperar por um período de tempo significativo.
Imagine que você está caminhando por um bosque escuro. Você tem uma lanterna, mas a bateria está fraca. Você não tem tempo de parar e carregar a bateria, você mantém algumas baterias extras na sua mochila, para que você possa rapidamente substituir a bateria da lanterna quando precisar. Essa é a tática chamada "cache".
Algumas estratégias comuns de manutenção de cache e suas vantagens e desvantagens.
Carregamento lento (lazy loading)
É uma estratégia que carrega os dados somente quando necessário
Vamos pegar por exemplo um cache que faz o armazenamento de chave-valor. Como o redis ou um Amazon ElasticCache
Ao invés da sua aplicação ir diretamente no banco de dados ele vai primeiro ao cache para buscar a informação. Se os dados existirem no cache e forem atuais, o cache os retornará ao seu aplicativo. Caso os dados não existam no cache ou tenham expirado, o aplicativo os solicita do seu armazenamento de dados. Em seguida seu aplicativo guarda os dados no cache. Dessa forma, ele poderá ser recuperado mais rapidamente na próxima vez que for solicitado.
Caso feliz
Undefined type
Undefined type
Caso triste
Undefined type
Undefined type
Undefined type
Undefined type
Diagrama descrevendo o fluxo
Vantagens
Undefined type
Undefined type
Undefined type
Desvantagens
Undefined type
Undefined type
Undefined type
Undefined type
Undefined type
Exemplo:
get_account_by_customer(customer_id)
customer_record = cache.get(customer_id)
if (customer_record == null) {
account_result = db.query("SELECT * FROM Accounts
WHERE customer_id == {0}", customer_id)
cache.set(customer_id, account_result) }
return customer_record
Gravação simultânea (write-through)
A estratégia de gravação simultânea (write-through) adiciona dados ou atualiza dados no cache sempre que eles são gravados no banco de dados.
Vantagens
Undefined type
Desvantagens
Undefined type
Undefined type
Undefined type
Undefined type
Exemplo:
save_account(account_id, values)
account_record = db.query("UPDATE Account WHERE id = {0}", account_id, values)
cache.set(customer_id, account_record)
return success
Adicionar o TTL
Nas duas estratégias mostradas acima pode ser adicionado um tempo de vida ao cache fazendo com que os dados não fiquem obsoletos.
O que é paginação de cache?
A paginação de cache é uma estratégia que permite a recuperação de grandes quantidades de dados, dividindo-os em páginas menores e armazenando-as em cache. Dessa forma, apenas as páginas necessárias são recuperadas, reduzindo a quantidade de dados que precisam ser armazenados em cache e melhorando o desempenho da aplicação.
Como funciona a paginação de cache?
Para implementar a estratégia de paginação de cache, é necessário definir o tamanho e o número de páginas que serão armazenadas. Quando uma solicitação de dados é feita, o cache verifica se a página solicitada já está armazenada. Se não estiver, a página é carregada a partir do armazenamento de dados e então é armazenada em cache. Se a página já estiver armazenada, ela é retornada imediatamente.
Vantagens da paginação de cache
Undefined type
Undefined type
Undefined type
Desvantagens da paginação de cache
Undefined type
Guardando a primeira página dos resultados
Vamos supor que temos um sistema de comentários paginados onde a primeira página vem sempre com os comentários mais recentes.
Pode ser inserido usando a estratégia de lazy loading para
Undefined type
Undefined type
Undefined type
Undefined type
Undefined type
Undefined type
E também podemos usar a estratégia de gravação simultânea
Ao criar um novo registro (comentário)
Undefined type
Undefined type
Quando encher a lista podemos excluir o primeiro que entrou.
Conclusão.
A estratégia de paginação de cache é uma técnica eficaz para otimizar o armazenamento de dados. Ao dividir grandes quantidades de dados em páginas menores, apenas as páginas necessárias são armazenadas em cache, melhorando o desempenho da aplicação e economizando memória. No entanto, a implementação da paginação de cache pode ser complexa. É importante avaliar cuidadosamente se essa estratégia é adequada para o seu sistema. Este foi um exemplo de utilização de cache. Não é impeditivo usar uma ou todas as estratégias ao mesmo tempo, dependendo do cenário e problema a ser resolvido.
Espero ter ajudado. Até a próxima!