Partilhar via


Armazenar dados em cache em um site de Páginas da Web do ASP.NET (Razor) para melhorar o desempenho

por Tom FitzMacken

Este artigo explica como usar um auxiliar para armazenar informações em cache para obter um desempenho mais rápido em um site do Páginas da Web do ASP.NET (Razor). Você pode acelerar seu site fazendo com que ele armazene - ou seja, cache - os resultados de dados que normalmente levariam tempo considerável para recuperar ou processar e isso não muda com frequência.

O que você aprenderá:

  • Como usar o cache para melhorar a capacidade de resposta do seu site.

Estes são os ASP.NET recursos introduzidos no artigo:

  • O WebCache auxiliar.

Versões de software usadas no tutorial

  • Páginas da Web do ASP.NET (Razor) 3

Este tutorial também funciona com Páginas da Web do ASP.NET 2.

Sempre que alguém solicita uma página do seu site, o servidor Web precisa fazer algum trabalho para atender à solicitação. Para algumas de suas páginas, o servidor pode ter que executar tarefas que levam um (comparativamente) longo tempo, como recuperar dados de um banco de dados. Mesmo que essas tarefas não deem muito tempo em termos absolutos, se seu site tiver muito tráfego, uma série inteira de solicitações individuais que fazem com que o servidor Web execute a tarefa complicada ou lenta pode somar muito trabalho. Isso pode, em última análise, afetar o desempenho do site.

Uma maneira de melhorar o desempenho do seu site em circunstâncias como essa é armazenar dados em cache. Se o site receber solicitações repetidas para as mesmas informações e as informações não precisarem ser modificadas para cada pessoa e não forem sensíveis ao tempo, em vez de rebuscá-los ou recalculá-los, você poderá buscar os dados uma vez e armazenar os resultados. Na próxima vez que uma solicitação chegar para essas informações, você apenas a tirará do cache.

Em geral, você armazena em cache informações que não são alteradas com frequência. Quando você coloca informações no cache, elas são armazenadas na memória no servidor Web. Você pode especificar quanto tempo ele deve ser armazenado em cache, de segundos a dias. Quando o período de cache expira, as informações são removidas automaticamente do cache.

Observação

As entradas no cache podem ser removidas por motivos diferentes de terem expirado. Por exemplo, o servidor Web pode ser temporariamente executado com pouca memória e uma maneira de recuperar a memória é jogando entradas para fora do cache. Como você verá, mesmo que tenha colocado informações no cache, você precisa marcar ter certeza de que elas ainda estão lá quando precisar.

Imagine que seu site tem uma página que exibe a temperatura atual e a previsão do tempo. Para obter esse tipo de informação, você pode enviar uma solicitação para um serviço externo. Como essas informações não mudam muito (dentro de um período de duas horas, por exemplo) e como chamadas externas exigem tempo e largura de banda, ela é uma boa candidata para o cache.

Adicionando cache a uma página

ASP.NET inclui um WebCache auxiliar que facilita a adição de cache ao seu site e a adição de dados ao cache. Neste procedimento, você criará uma página que armazena em cache a hora atual. Esse não é um exemplo do mundo real, pois o momento atual é algo que muda com frequência e que, além disso, não é complexo de calcular. No entanto, é uma boa maneira de ilustrar o cache em ação.

  1. Adicione uma nova página chamada WebCache.cshtml ao site.

  2. Adicione o seguinte código e marcação à página:

    @{
        var cacheItemKey = "CachedTime";
        var cacheHit = true;
        var time = WebCache.Get(cacheItemKey);
    
        if (time == null) {
            cacheHit = false;
        }
    
        if (cacheHit == false) {
            time = @DateTime.Now;
            WebCache.Set(cacheItemKey, time, 1, false);
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>WebCache Helper Sample</title>
    </head>
    <body>
        <div>
            @if (cacheHit) {
                @:Found the time data in the cache.
            } else {
                @:Did not find the time data in the cache.
            }
        </div>
        <div>
            This page was cached at @time.
        </div>
    </body>
    </html>
    

    Ao armazenar dados em cache, você os coloca no cache usando um nome exclusivo em todo o site. Nesse caso, você usará uma entrada de cache chamada CachedTime. Esse é o cacheItemKey mostrado no exemplo de código.

    O código primeiro lê a entrada de CachedTime cache. Se um valor for retornado (ou seja, se a entrada de cache não for nula), o código apenas definirá o valor da variável de tempo para os dados de cache.

    No entanto, se a entrada de cache não existir (ou seja, é nula), o código define o valor de hora, adiciona-o ao cache e define um valor de expiração como um minuto. Após um minuto, a entrada de cache é descartada. (O valor de expiração padrão de um item no cache é de 20 minutos.) O comando WebCache.Set(cacheItemKey, time, 1, false) mostra como adicionar o valor de hora atual ao cache e definir sua expiração como 1 minuto. Definir o parâmetro slidingExpiration como false significa que o tempo de expiração não é renovado sempre que é solicitado. Ele expirará exatamente 1 minuto depois de ter sido originalmente adicionado ao cache. Se você definir esse valor para true o tempo de expiração de 1 minuto, será redefinido sempre que o valor for solicitado do cache.

    Esse código ilustra o padrão que você sempre deve usar ao armazenar dados em cache. Antes de tirar algo do cache, sempre marcar primeiro se o WebCache.Get método retornou nulo. Lembre-se de que a entrada de cache pode ter expirado ou pode ter sido removida por algum outro motivo, portanto, qualquer entrada determinada nunca tem garantia de estar no cache.

  3. Execute WebCache.cshtml em um navegador. (Verifique se a página está selecionada no workspace Arquivos antes de executá-la.) Na primeira vez que você solicitar a página, os dados de hora não estão no cache e o código precisará adicionar o valor de tempo ao cache.

    cache-1

  4. Atualize WebCache.cshtml no navegador. Desta vez, os dados de hora estão no cache. Observe que a hora não foi alterada desde a última vez que você visualizou a página.

    cache-2

  5. Aguarde um minuto até que o cache seja esvaziado e atualize a página. A página indica novamente que os dados de tempo não foram encontrados no cache e o tempo atualizado é adicionado ao cache.

Recursos adicionais