Fazeremos um exemplo simples e rápido mostrando como armazenar algumas informações de uma página no cache e repassá-las a outra página.

Começando, abra o Visual Studio, vá em File > New Project (CTRL + SHIFT + N), escolha o template ASP.NET Web Application e dê o nome ExemploCache.

Na Default.aspx, vá ao modo Design, crie uma tabela e insira alguns controles na página.

Na ordem em que se vê na imagem acima, passei os seguintes ID’s aos respectivos controles: lblNome, txtNome, lblCidade, txtCidade, btnSalvarCache e btnChamarPagina.

Antes de ir aos códigos, crie uma nova classe que guardará o tipo de dados que iremos armazenar em cache. Dê o nome Pessoa a essa classe criada.

Na classe criada crie o código com as propriedades referentes aos valores que serão inseridos pelo usuário na página:


public class Pessoa
    {
        public string Nome { get; set; }
        public string Cidade { get; set; }
    }

Agora sim, vá à página de códigos e crie o método abaixo, que irá salvar os dados em cache:


private void SalvarEmCache()       
{
   try
   {
     //Instancio a classe Pessoa, passo as propriedades dela e as 
     atribuo os valores aos textboxes

     Pessoa objPessoa = new Pessoa();
     objPessoa.Nome = txtNome.Text;
     objPessoa.Cidade = txtCidade.Text;

      //Crio o Cache com o nome DadosPessoa, que recebe o objeto 
     instanciado da classe Pessoa

     Cache["DadosPessoa"] = objPessoa;
   }
   catch (Exception ex)
   {
    throw new Exception(ex.Message);
   }
 }

A forma descrita acima é a mais simples de se guardar valores no Cache. Mais adiante mostrarei outra forma.

Agora chame o método recém-criado no botão Salvar em Cache:


protected void btnSalvarCache_Click(object sender, EventArgs e)
{
  SalvarEmCache();
}

Agora vá à Solution Explorer (CTRL +W + S), e crie uma nova página com o nome DadosPessoa. Nessa página, que irá receber os dados da Default.aspx, vá ao modo Design e adicione os controles para que fique parecido com a imagem abaixo:

Solution Explorer

Como você pode perceber na imagem deixei os labels Nome e Cidade somente com o ID, sem texto, já que os textos virão pelo Cache gerado pela Default.aspx.

Isso mesmo que iremos fazer, criando o seguinte método:


private void RecuperaDadosDoCache()
 {
 try
 {
  //Verifico se meu Cache está diferente de nulo
 if (Cache["DadosPessoa"] != null)
 {
   //Instancio a classe Pessoa
   Pessoa objPessoa = new Pessoa();
 
   //Faço um Cast(conversão) no Cache para o tipo da classe Pessoa
   objPessoa = (Pessoa)Cache["DadosPessoa"];

   //Meus labels recebem os valores armazenados na classe Pessoa
   lblNome.Text = objPessoa.Nome;
   lblCidade.Text = objPessoa.Cidade;
  }
 }
 catch (Exception ex)
 {
  throw new Exception(ex.Message);
 }
}

Assim faço a verificação se há dados no Cache, prevenindo desta forma erros de compilação, para então fazer com o que os labels recebam os valores da digitados pelo usuário na Default.aspx. Agora chame este método no Page_Load:


protected void Page_Load(object sender, EventArgs e)
{
   RecuperaDadosDoCache();
}

Agora volte a Default.aspx, dê dois cliques no botão Chamar Página e coloque este código que irá redirecionar para a página DadosPessoa.aspx:


protected void btnChamarPagina_Click(object sender, EventArgs e)
{
    Response.Redirect("DadosPessoa.aspx");
}

Voltando da onde paramos, abra a Solution Explorer, clique com o botão direito na Default.aspx e clique em Set As Start Page, para que a Default.aspx seja a página inicial da aplicação quando a mesma for compilada. Salve o projeto, aperte F5 para compilar, clique em OK para que o Web.Config habilite a compilação e aguarde.

Informe na tela o Web.ConfigNome

e Web.ConfigCidade

e clique no botão Salvar em Cache:

Web.Config

PS: Não criamos um label para exibir mensagem de confirmação da gravação dos dados, já que o intuito deste artigo é apenas de mostrar o uso simplificado do Cache.

Agora clique no Chamar Página e veja o resultado:

Web.Config

Podemos ver que os dados foram armazenados em Cache e não se perderam ao clicarmos no botão Chamar Página.

Para entendermos melhor o que ocorre em tempo de execução, coloque um breakpoint (aperte F9) na linha que instancia o objeto Pessoa, na Default.aspx e um na linha que faz a verificação se o Cache está diferente de nulo na DadosPessoa.aspx e compile novamente.

Informe o Nome e Cidade e clique no botão Salvar em Cache. O breakpoint será chamado. Aperte F10 para pular de linha em linha e veja que os objetos da classe Pessoa serão populados com os valores que acabamos de digitar:

Trabalhando com Cache

Aperte F5 para voltar à página e clique no botão Chamar Página. Iremos ao breakpoint da página DadosPessoa.aspx, percorra linha a linha e veja que é feita o Cache virá com os dados da Default.aspx, irá armazenar estes dados na classe Pessoa e os repassará aos labels criados nesta página, que receberão os dados dos objetos criados na classe.

Trabalhando com Cache

Simples né?

Como dito anteriormente, vamos ver a outra forma de se guardar valores no Cache, que é pelo método Insert, que tem até cinco sobrecargas em sua assinatura, como podemos ver abaixo (vamos usar todas):

Trabalhando com Cache

Comente ou altere a linha do código que guarda os dados no cache para esta:


  Cache.Insert("DadosPessoa", objPessoa, null, DateTime.Now.AddSeconds(30),

                 TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, null);
               

Acima passei estes parâmetros: a chave, que é o nome do Cache, o objeto, que nesse exemplo é a instância da classe Pessoa, o parâmetro de dependência, que neste caso deixamos como nulo, o parâmetro que indica o tempo de expiração de meu cache no cache do servidor, deixei 30 segundos, o intervalo entre o tempo que o objeto foi acessado pela última vez e o tempo em que ele irá expirar, aqui deixo como Zero, a prioridade em que meu objeto Cache ficará na memória do meu servidor, tendo diversas opções, que aqui deixei como NotRemovable (que indica que nosso objeto Cache nunca será removido do servidor de minha aplicação) e um delegate, que irá notificar a aplicação quando os objetos forem excluídos do Cache, não o usaremos por isso deixei como nulo.

Salve e rode a aplicação. Você verá que a aplicação funciona do mesmo jeito, a diferença é que agora nosso Cache está mais detalhado, com mais opções que, dependendo da complexidade do seu sistema, podem ser muito importantes.


Saiu na DevMedia!

  • Curso de Docker:
    Neste curso conheceremos os conceitos básicos do Docker, como ele funciona e como esta ferramenta pode ajudar no desenvolvimento, teste e execução de aplicações.