Você sabe o que são caches?
O cache é um tipo de memória de alta velocidade que usamos para armazenar os dados que são acessados com frequência, reduzindo assim o tempo de acesso destes dados. Caches podem ser utilizados em vários níveis, infraestrutura por exemplo (o cache do processador), ou a memória cache do sistema como um todo e até mesmo, como no exemplo de desenvolvimento de sistemas, caches para os dados da aplicação.
Usamos o cache para melhorar a performance dos sistemas, entretanto, nem tudo são flores. Os caches precisam ser usados com inteligência pois o uso indevido pode causar inconsistências no sistema, vejamos alguns exemplos:
- Valores que alteram constantemente não devem ser colocados em cache, um exemplo podem ser as cotações de ações ou até mesmo lances de um pregão online. Imagine o problema que isso pode gerar se tivermos um valor desatualizado para uma transação em função do valor antigo no cache? Sinistro não?!?!
- Os caches precisam ter uma validade – conceito de cache expiration ou cache invalidation – pois os dados se ficarem muito antigos, podem gerar inconsistências. Pense na emissão de uma NF baseada no valor do produto, se utilizar o valor do cache para calcular a nota, talvez o preço dele esteja desatualizado em relação ao valor da base de dados em função de uma promoção, por exemplo.
- Se um dado é volátil ele não deve estar no cache: o nome de um produto, nome de um fornecedor, isso raramente muda, portanto pode ir para o cache; entretanto, o preço de um produto, totalizações, isso precisa de uma atenção, principalmente quanto à validade, pois podem alterar com o tempo.
Uma dica importante, é ter o cache válido dentro de uma requisição, ou seja, desde o clique do botão até a mensagem final do processamento, o cache pode estar válido, após isso, ele deve ser invalidado e limpo. Quando usamos microsserviços, dica é trafegar os dados entre os contratos dos serviços de forma a mantê-los sempre atualizados.
O mais importante de tudo é entender o processo do cliente e analisar se vale a pena ou não a implementação do cache, como regra, deve ser implementado ao final do desenvolvimento – nunca comece a desenvolver pelo cache, ele deve ser a última coisa a ser feita se for necessário!
O que o BEF oferece para ajudar com caches?
A Tecnologia oferece dois objetos principais para trabalhar com caches:
- BusinessCacheProvider: esse objeto simplifica o trabalho de armazenar e obter informações no cache, usando métodos Set() e Get() para isso, além de permitir a configuração de validade para os itens adicionados. Confira mais na nossa Wiki.
- EntityCacheContext: é o responsável por facilitar os caches de entidades, trabalha com o conceito de using, o que facilita a aplicação em processos que possuem o cache válido durante a requisição. A documentação completa também está na nossa Wiki.
Além disso, a Tecnologia está trabalhando constantemente para melhorar os objetos além de pensar em novas formas de melhorar o uso dos caches. Como casos de sucesso podemos citar:
- Caches de permissões do WES na versão 23.0.
- Caches de campos lookups no runner.
- CAC do runner.
Quer saber mais?
Se você quiser entender um pouco mais do BEF, temos um vídeo bem legal do treinamento da Tecnologia:
Além disso, o Dirceu Schlickmann participou de um BE.TECH exclusivo sobre caches, vale muito a pena assistir:
Nesse BE.TECH foi disponibilizado um pacote de exemplo com os fontes utilizados, se você quiser fazer o download para acompanhar, baixe aqui.
Com todo esse material, desejamos que você fique fera no uso e aplicação dos caches, mas se ainda tiver dúvidas e precisar de auxílio, chame alguém da Tec, teremos o maior prazer em te ajudar.
Te vejo na próxima, um abraço.
Danton C. Franco Junior
#TimeTec