BT
x A sua opinião é importante! Por favor preencha a pesquisa do InfoQ sobre os seus hábitos de leitura!

10 Cuidados ao se utilizar cache nas suas aplicações

por Pedro Mariano em 06 Out 2010 |

Geralmente a utilização de uma estratégia de cache em uma arquitetura de software vêm por conta da necessidade de se ganhar performance ou até de economizar alguns recursos como a rede. O grande problema é que o cache consome alguns recursos importantes como memória e muitas vezes uma abordagem precipitada do mesmo pode levar até a uma situação inversa, onde você perde desempenho ao invés de ganhar.

Cachear objetos que são utilizados frequentemente é uma estratégia muito boa para que quer ganhar performance visto que você pode evitar que seu fluxo acesse alguns layers da sua aplicação. Muitos desenvolvedores acabam por escolher a opção de cache tanto pela fácil implementação quanto pela quantidade de soluções que já automatizam essa parte para você.

Sem dúvida, inúmeras aplicações hoje em dia utilizam da técnica de cacheamento quando o assunto é banco de dados. Evitar que queries sejam diretamente no disco fisico e passem a ser feitas na memório, podem trazer ganhos de performance significativos. O grande problema é que algumas aplicações não se preocupam com os detalhes e com a implementação de forma correta. Ao se utilizar cacheamento de objetos é necessário possuir uma estratégia e uma regra bem definida sobre o que pode ou não pode ser cacheado, caso contrário você o efeito inicialmente buscado, performance, pode na verdade ser um problema para sua aplicação levando até a perda de desempenho.

Omar AL Zabir, arquiteto chefe da BT, postou em seu blog os 10 principais erros que acontecem na utilização do cache que podem quebrar totalmente sua aplicação. São eles:

  1. Confiar no serializer padrão do .NET
  2. Guardar objetos grandes em apenas um item de cache.
  3. Utilizar o cache para compartilhar os objetos entre as threads.
  4. Assumir que os items estarão no cache após consultar eles.
  5. Armazenar coleções inteiras e seus objetos aninhados.
  6. Armazenar objetos pai-filho juntos ou também separados.
  7. Cachear definições de configuração.
  8. Cachear objetos vivos que utilizam alguma forma de stream, arquivo, registro, ou rede.
  9. Armazenar o mesmo item utilizando diversas chaves.
  10. Não atualizar ou deletar os items do cache após atualizar ou deletar os items do banco de dados.

E você leitor tem mais alguma dica para quem deseja utilizar cacheamento de objetos nas suas aplicações? Qual é a sua experiência com cacheamento? Você já sofreu perda de performance?

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Decisões de design ... by Marcio Torres

A estratégia de cache é um problema de design. Eu e a equipe discutíamos uma vez se faríamos o cache das entidades vindas do banco ou dos DTO's, e isto envolvia em qual camada (Business, Data Access) seria implementado. Entre muitas colocações de prós e contras, idealismos e tudo mais, se utilizou o cache dos DTO's na camada de negócios. Eu sou a favor de caches que sejam plugáveis, transparentes a aplicação, mas..., bem, quem aqui né amigo, não passou por problemas de design para cache?

Sou fã do infoq, um abraço.

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

1 Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT