Expiração e remoção

Expiração e remoção no Cache na Função do Azure

Atualizado: agosto de 2015

ImportantImportante
A Microsoft recomenda que todos os novos desenvolvimentos usem Cache Redis do Azure. Para documentação atual e orientação sobre como escolher uma oferta de Cache do Azure, consulte Qual oferta de Cache do Azure é ideal para mim?

O Cache do Microsoft Azure não retém na memória permanentemente os objetos armazenados em cache. Além de serem removidos explicitamente da memória pelo uso do método Remove, os objetos em cache também podem expirar ou ser removidos pelo cluster de cache.

A expiração do cache permite que o cluster de cache remova automaticamente os objetos armazenados do cache. Quando os métodos Put ou Add são usados, um valor opcional de tempo limite de objeto pode ser definido para um determinado objeto armazenado a fim de determinar por quanto tempo ele residirá no cache. Se o valor de tempo limite do objeto não for fornecido quando o objeto é armazenado no cache, esse objeto usará o tempo de expiração padrão.

Ao usar caching baseado em função, você tem três opções de expiração:

 

Tipo de Expiração Descrição

Nenhum

A expiração é desabilitada. Os itens permanecem no cache até serem removidos ou até que o cluster de cache seja reiniciado.

Absoluta

Os itens expiram em um período de tempo definido após a sua criação.

Deslizante

Os itens expiram em um período de tempo definido após a última vez em que foram acessados. Cada vez que o objeto é acessado, a janela de tempo deslizante é redefinida. Isso mantém os itens usados frequentemente por mais tempo no cache.

noteObservação
É importante notar o comportamento da expiração Deslizante quando usada em combinação com um cache local. Se um item é lido no cache local, o objeto no cluster de cache não é acessado. Portanto, é possível que o item expire no servidor mesmo que esteja sendo lido localmente.

No Shared Caching, a expiração sempre é Absoluta e não é possível definir um tempo de expiração padrão. Os itens no Shared Caching expiram após 48 horas. Entretanto, você pode usar os métodos Put e Add para definir tempos de expiração explícitos no código. Observe que os provedores ASP.NET usam automaticamente essas sobrecargas para fornecer tempos limite explícitos para estado da sessão e cache de saída. Em ambos os casos, quando o tamanho do cache excede os limites da sua oferta do Shared Caching, os itens menos utilizados recentemente no cache são removidos.

Quando os objetos em cache são bloqueados para fins de simultaneidade, eles não são removidos do cache mesmo que ultrapassem o prazo de expiração. Tão logo sejam desbloqueados, eles serão removidos imediatamente do cache se estiverem além do prazo de expiração.

Para evitar a remoção instantânea quando você desbloqueia objetos expirados, o método Unlock também oferece suporte à extensão da expiração do objeto em cache.

Existem dois tipos complementares de invalidação para o cache local: invalidação baseada em tempo limite e invalidação baseada em notificação.

TipDica
Depois que os objetos são armazenados no cache local, o aplicativo pode usá-los até que sejam invalidados, mesmo que sejam atualizados por outro cliente no cluster de cache. Por esse motivo, é aconselhável habilitar o cache local para dados que mudam com pouca frequência.

Depois que são baixados para o cache local, os objetos permanecem nele até atingirem o valor de tempo limite de objeto especificado nos parâmetros de configuração do cliente de cache. Quando atingem esse valor de tempo limite, os objetos são invalidados para que possam ser atualizados a partir do cluster de cache na próxima vez que forem solicitados.

Se o cliente de cache habilitou o cache local, também é possível usar notificações de cache para invalidar automaticamente os objetos armazenados em cache localmente. Diminuindo a vida útil desses objetos conforme seja necessário, você pode reduzir a possibilidade de que o seu aplicativo use dados obsoletos.

noteObservação
Não há suporte para notificações no Shared Caching.

Quando você usa notificações de cache, o aplicativo comunica-se com o cluster de cache em intervalos regulares para verificar se há novas notificações disponíveis. Por padrão, esse intervalo, chamado de intervalo de consulta, é de 300 segundos. O intervalo de consulta é especificado em unidades de segundos nos parâmetros de configuração do aplicativo. Observe que, mesmo com a invalidação baseada em notificação, os tempos limite continuam a ser aplicáveis aos itens armazenados no cache local. Isso faz com que a invalidação baseada em notificação seja complementar à invalidação baseada em tempo limite.

Para obter mais informações e exemplos, consulte Cache local no Cache na Função do Azure.

O suporte à remoção dos objetos menos utilizados recentemente (LRU) destina-se a manter a capacidade de memória disponível para cache em cada host de cache. Limites são usados para assegurar que a memória seja distribuída igualmente entre todos os hosts no cluster. Esse limite é determinado por dois fatores: a quantidade de memória física disponível em cada máquina e a porcentagem de memória de cache reservada em cada máquina.

Quando o consumo de memória excede o limite, os objetos são removidos da memória, independentemente de terem expirado ou não, até que a pressão de memória seja aliviada. Os objetos armazenados em cache subsequentemente podem ser desviados para outras máquinas no cluster de cache para manter uma distribuição ideal da memória.

WarningAviso
Se você desabilitar a remoção, correrá o risco de limitação. Nessa condição, a memória excedeu o limite mas não é possível atenuar a escassez de memória. Os clientes que tentarem adicionar itens ao cache nesse estado receberão uma exceção até que ele seja resolvido. Observe que o Shared Caching não oferece suporte à desativação da remoção em um cache.

Os comportamentos de expiração e remoção são configurados no nível de cache nomeado, nos parâmetros de configuração do cluster.

Os seguintes métodos permitem substituir as configurações padrão no cache:

  • Os métodos Add e Put fornecem sobrecargas que permitem especificar um valor de tempo limite de expiração apenas para objetos que sejam adicionados ao cache.

  • Os métodos PutAndUnlock e Unlock fornecem sobrecargas que permitem estender a expiração de um objeto depois de desbloqueá-lo.

  • O método ResetObjectTimeout permite estender explicitamente a vida útil de um objeto, substituindo as configurações de expiração do cache.

independentemente das configurações de expiração ou remoção, quando um cluster de cache é reiniciado, todos os objetos no cache são limpos. O código do aplicativo terá que recarregar o cache a partir de uma fonte de dados se os dados não forem encontrados no cache. Isso frequentemente é descrito como um padrão de programação cache-aside.

Consulte também

Mostrar:
© 2016 Microsoft