sábado, 20 de junho de 2009

ASP.NET - Utilizando dependência de cache

Nesse post será tratado a utilização de cache em sites ASP.NET um tema que obrigatoriamente deve ser tratado em sistemas comerciais para garantir um maior desempenho nas operações. Além disso, geralmente a escalabilidade de uma aplicação passa pela correta utilização de cache nas áreas mais utilizadas e que podem utilizar desse mecanismo.

Porém, somente a utilização do cache de dados pode gerar diversos outros problemas como sincronização da atualização dos dados e gestão do consumo de recursos. Para resolvermos alguns desses aspectos estaremos tratando o assunto de dependência de cache que irá auxiliar na gestão das informações facilitando a construção de estruturas mais complexas de relação entre informações.

Para fins de exemplo estaremos tratando os mecanismos de cache de um site de e-commerce, onde podemos ter diversas lojas com diversos setores de informação como promoções, listagem de produtos, preços, etc. No exemplo só estará sendo utilizado o cache de dados para fins de simplificação, mas poderia ser utilizado também OutputCache nesse mecanismo.

Imaginando que queremos armazenar em cache as informações do detalhe de um produto (preços, produtos relacionados, promoções relacionadas e informações técnicas), vitrine de uma categoria de produtos e listagem de produto da categoria.

Todas essas informações podem ser exibidas em momentos diferentes do Site como, por exemplo, promoções de um produto podem ser exibidas no detalhe ou no fechamento da encomenda. Preços são exibidos nas listagens de produtos, fechamento da encomenda e vitrine de categorias.

Sendo assim, queremos desvincular as informações de promoções, preços e informações técnicas, pois cada uma delas possui um tempo diferenciado de atualização para sincronização com o usuário final do Site. Por exemplo, preços geralmente possuem atualização de informação com maior freqüência do que informações técnicas.

Para criar o cache das informações iremos utilizar o componente System.Web.HttpRuntime do ASP.NET que possibilita a utilização do objeto Cache, onde é realizada a gestão de cache da aplicação.

Para inserir um cache utilizaremos o seguinte código:

System.Web.HttpRuntime.Cache.Insert(chaveDoCache, valorDoCache, new System.Web.Caching.CacheDependency(null, new string[] { chaveDoCacheParaDependencia }), DateTime.MaxValue, TimeSpan.Zero);

No exemplo iremos estruturar o cache de maneira que possa ser removido todo o cache da aplicação, somente uma loja, somente um dos sistemas, somente uma área do sistema e um dado específico.

Para isso foram criados métodos de limpeza do cache para cada um dos alvos definidos acima no componente CacheSystem.Helper.

public static void Clear()

public static void Clear(int companyCode)

public static void Clear(int companyCode, string system)

public static void Clear(int companyCode, string system, string subsystem)

public static void Clear(int companyCode, string system, string subsystem, string key)

Toda vez que uma informação é armazenada em cache ela deve passar o valor da chave de sua depenência vinculando assim as operações de atualização entre as duas informações.

Código fonte para download: clique aqui

Detalhes do ambiente de desenvolvimento
  • Linguagem: C#

  • Framework: .NET Framework 3.5 SP 1

  • Ferramenta: Visual Studio 2008 Development Edition

  • Sistema Operacional: Windows XP SP2

Nenhum comentário:

Postar um comentário