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.

image-alt70


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

image-alt70

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.

image-alt70
image-alt70


Pode ser inserido usando a estratégia de lazy loading para

Undefined type

Undefined type

Undefined type

Undefined type

Undefined type

Undefined type


image-alt70



E também podemos usar a estratégia de gravação simultânea

Ao criar um novo registro (comentário)

Undefined type

Undefined type


image-alt70


Quando encher a lista podemos excluir o primeiro que entrou.

image-alt70

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!