Whats new? | Login | Parceiros
Cadastre-se | Atendimento | RSS
+ .net:
artigos   |   vídeos   |    cursos   |    mais

Cachê no ASP.NET

Quando falamos em cachê estamos falando de armazenamento de dados em memória e também de desempenho.

DIEGO DIAS
Diego Dias (diego.dfsd@uol.com.br), 21 anos, desenvolvedor C# e Visual Basic .NET desde 2002. Atualmente é analista de sistemas da Ciatech Soluções Digitais empresa do segmento de e-learning (www.ciatech.com.br).


Ver space do autor


Estatísticas:
Visualizações:
4956
Favoritado:
 5 vez(es)
Conteúdo:
Didática:
Utilidade:
4 0
votos: 6

Serviços:



Cachê no ASP.NET

 

Eu andei muito atarefado e tive dificuldades para postar este artigo, então aos que acompanham meus posts peço desculpas.

 

Bom, hoje vamos falar de cachê no ASP.NET.

 

Introdução

Quando falamos em cachê estamos falando de armazenamento de dados em memória e também de desempenho.

 

É importante lembrar que por ser armazenado em memória os dados contidos no cachê são voláteis.

 

Conceito

O conceito de cachê é bem simples, basicamente é armazenar dados frequentemente acessados, obtidos a partir de uma origem de dados a qual normalmente não é modificada constantemente no dia, por exemplo, (Não existe uma regra para definir quando o cachê deve ser implementado em uma aplicação).

 

Nota: O cachê pode ser facilmente visto como um diferencial positivo ou negativo em uma aplicação, pois pequenas falhas na lógica de utilização podem sobrecarregar o servidor e deixar a aplicação mais lenta do que se tivesse rodando sem a implementação de uma lógica de cachê.

 

Cachê no ASP.NET

O cachê fornece aos desenvolvedores a possibilidade de armazenar um dado em memória usando chave/valor.

 

O ASP.NET oferece possibilidades interessantes para que seja possível gerenciar este recursos com eficiência. Utilizando os recursos de gerenciamento do próprio ASP.NET é possível remover itens contidos no cachê caso a sua fonte de dados seja modificada, é possível também expirar os dados do cachê definindo um período máximo para sua permanência e outra possibilidade é que o ASP.NET faça a limpeza destes dados caso a memória esteja baixa.

 

Cachê - Novas características do ASP.NET 2.0

Abaixo estão listadas características novas implementadas no ASP.NET 2.0, porém neste artigo não vou me aprofundar muito nelas e sim em uma característica existente desde a versão 1.x do ASP.NET e em artigos futuros vamos falaremos detalhadamente sobre estas mudanças.

 

Eu optei por falar de um recurso que posso chamar de antigo, pois notei que muitos o desconhecem apesar de ser muito útil e fácil de implementar.

 

Perfis de Cache

Este recurso possibilita ao usuário definir perfis no arquivo de configuração de sua aplicação web.config, onde é possível configurar todos os parâmetros do cachê e esta configuração pode ser aplicada a uma ou a N página de sua aplicação, abaixo segue um exemplo da configuração de um perfil:

 

    <caching>

      <outputCacheSettings>

        <outputCacheProfiles>

     <add name="cacheteste" enabled=”true” duration="60"                               varyByParam=”” />

        </outputCacheProfiles>

      </outputCacheSettings>

    </caching>

Listagem 01. Definição de um perfil de cachê.

 

Customizando CacheDependency

Este recurso possibilita ao usuário criar uma classe customizada de dependência de cachê, onde é preciso somente que a classe customizada herde a classe CacheDependency e implemente uma regra qualquer para expirar o cachê.

 

SqlCacheDependency

Este recurso possibilita ao usuário definir uma dependência de cachê ligada diretamente a uma tabela ou a uma linha especifica de uma tabela do SQL Server, onde ao ser modificada a linha ou a tabela o dado existente no cachê é automaticamente removido.

 

O ASP.NET pode gerenciar modificações feitas em tabelas a partir da versão 7 do SQL Server, porém para gerenciar modificações em uma linha especifica é necessário a utilização do SQL Server 2005.

 

Seguimentando Cachê

Este recurso possibilita ao usuário definir uma área de sua página que não será armazenada no cachê. Então parte será armazenada e parte não será, por exemplo, você tem uma página que exibi dados de um banco de dados, mas também exibi dados estáticos então é possível definir que a área estática não será armazenada no cachê. Já que não há necessidade para tal.

 

Usando CacheDependency

Pesquisando e conversando com alguns amigos sobre a utilização de uma lógica de cachê em nossas aplicações descobri que poucos sabiam que existe a possibilidade de associar um objeto existente no cachê a uma dependência não física e os que sabiam nunca implementaram tal idéia.

 

Para implementar uma dependência como mencionado acima, devemos utilizar o que chamamos de keys, o ASP.NET fornece um overload na classe CacheDependency que recebe como parâmetro um array de string contendo os identificadores de objetos contidos no cachê que serão as dependências a imagem 01 possibilita um entendimento melhor deste método.

 

ddcacheaspnetfig01.jpg 

Figura 01. Overload da Classe CacheDependency utilizado neste artigo.

 

Este overload permite que sejam utilizadas chaves de itens já existentes no cachê para o ASP.NET se baseie no seu conteúdo e identifique quando os objetos de cachê dependentes deste devem ser removidos. A listagem 01 demonstra sua utilização.

 

public class Clientes

{

public static readonly string[] ChavesMestre = new string[] {"keyCliente" };

     

        public List<Cliente> Listar()

{           

            List<Cliente> nomes = new List<Cliente>();

 

            System.Web.Caching.Cache dadosCache = HttpRuntime.Cache;

               

            if (dadosCache.Get("Clientes") == null)

            {

                dadosCache.Insert(ChavesMestre[0], DateTime.Now);

 

                nomes.Clear();

                nomes.Add(new Cliente(1, "Diego", "diego.dias@2dsolucoes.net"));

                nomes.Add(new Cliente(2, "Fulano", "fulano.fulano@2dsolucoes.net"));

                nomes.Add(new Cliente(3, "Fernando", "diego.dfsd@uol.com.br"));

                nomes.Add(new Cliente(4, "Mario", "atendimento@2dsolucoes.com.br"));

 

                System.Web.Caching.CacheDependency cd = new System.Web.Caching.CacheDependency(null, ChavesMestre);

                dadosCache.Insert("Clientes", nomes, cd);

            }

            else

            {

                nomes.Clear();

                nomes = dadosCache.Get("Clientes") as List<Cliente>;

            }

 

            return nomes;

        }

    }

Listagem 01.  Demonstra como utilizar a dependência a partir de keys.

 

Como podemos ver na listagem 01 existe um método denominado de Listar que é responsável por listar clientes. Neste método podemos ver que existem algumas linhas destacadas.

 

Onde a linha destacada em amarelo é onde é criado um cachê que pode ter um valor qualquer, mais adiante explicarei a necessidade de criá-lo.

 

A linha destacada em cinza é onde é criado o cachê com uma lista de clientes e também onde é definida a dependência deste objeto que acaba de ser inserido no chave. Como se pode ver antes da inserção do objeto no cachê é criado um objeto de dependência cujo, este objeto é o que orienta o ASP.NET quando a listagem de clientes deve ser removida do cachê.

 

Como eu havia dito, antes de inserir a listagem de clientes no cachê foi inserido no cachê um objeto qualquer (neste caso a data atual) a chave que identifica este objeto será usada na criação do objeto de dependência para indicar que quando o objeto referente à chave ChavesMestre for modificado todos os demais objeto que foram associados a ele (objeto de dependência) serão removidos do cachê.

 

Está é uma solução interessante no meu ponto de vista, até mesmo por que existem situações que não é possível gerenciar arquivos e o banco de dados não é um Sql Server.

 

Nota: O gerenciamento de dependência ligado direto a um banco de dados só é possível se o banco for SQL Server a partir da versão 7

 

Bom até os próximos artigos, onde discutiremos as demais formas de fazer dependência e vocês poderam então decidir qual é a mais adequada para sua aplicação.

 

Referências:

http://msdn2.microsoft.com/en-us/library/xsbfdd8c(VS.80).aspx

 

Diego Dias    

diego.dias@2dsolucoes.net





Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar ;-)



 


[Fechar]
Este post está disponível para assinantes da .net Magazine ou para quem possui Créditos DevMedia.

  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
DevMedia Group   www.devmedia.com.br   |   www.javafree.org   |   www.mrbool.com
2010 - Todos os Direitos Reservados a DevMedia Group - (21) 3382-5038