Na vida cotidiana, você deve ter tido uma experiência em que uma caixa de leite ficou na geladeira por mais de um tempo e você esqueceu de jogá-la fora. O que acontece a seguir é que você tem leite velho na geladeira, ocupando espaço, não serve para nada e só pode ser prejudicial se consumido. Da mesma forma, seus dados em cache também devem vir com uma data de validade. Quaisquer dados mantidos em seu cache por muito tempo tornam-se obsoletos (como o leite), não têm utilidade e ocupam apenas espaço em seu cache. E a solução em ambos os casos é semelhante: jogue fora!
Este blog explica as estratégias de expiração para manter os dados em seu cache atualizados e descartar os dados obsoletos.
Expiração de dados de cache: a necessidade e o conceito
Vamos supor que você esteja executando um site de comércio eletrônico e tenha adicionado as informações desses produtos no cache. Por um longo período de tempo, as informações dos produtos são mantidas no cache sem serem alteradas. Mas agora, por algum motivo, os preços de alguns produtos foram atualizados na fonte de dados. Nesse caso, a inconsistência de dados ocorre porque seus clientes ainda estão visualizando os preços mais antigos, que na verdade são os dados obsoletos em cache.
NCache fornece expiração onde você pode definir um limite de tempo com seus dados e, uma vez atingido o limite, os dados não são mais válidos. Os dados invalidados precisam ser removidos do cache após um Intervalo limpo. É um intervalo (definido por você) após o qual todos os itens expirados são removidos automaticamente do cache. Assim, qualquer item expirado não é removido do cache imediatamente.
Expiração de dados em NCache NCache Adicionar ao carrinho
Tipos de vencimento em NCache
NCache fornece as seguintes estratégias para atender aos requisitos do usuário:
- Expiração absoluta/padrão absoluta
- Expiração deslizante/padrão deslizante
Vamos olhar atentamente para ambos os tipos e seus usos.
Expiração Absoluta
Nesta estratégia, é especificado um tempo absoluto com o item que precisa ser invalidado. O tempo especificado é mantido no UTC formato de hora, portanto, a hora especificada em qualquer zona é convertida para o formato de hora UTC no servidor de cache. O tempo pode variar de segundos para horas para dias para meses, e depois de decorrido o tempo, o item é invalidado ou expirado. Veja a Figura 1 para maior clareza:
Caso de uso: Para casos em que você pode estimar por quanto tempo qualquer item deve ser retido no cache. Por exemplo, se um produto por tempo limitado for lançado e não puder ser vendido após 24 horas, o item será adicionado com validade absoluta de 24 horas e após isso, o produto expirará do cache.
Vejamos o exemplo de código que mostra a adição de um item no cache que expira após 5 minutos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: Cache is already connected // Get product from database against given product ID Product product = FetchProductFromDB(1001); // Generate a unique cache key for this product string key = $"Product:{product.ProductID}"; // Create a new CacheItem for this product with expiry var cacheItem = new CacheItem(product); var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); cacheItem.Expiration = expiration; cache.Insert(key, cacheItem); |
Expiração deslizante
Como o nome explica, essa estratégia mantém os dados no cache enquanto estiverem sendo usados. Assim, os dados que não foram usados por um tempo específico são invalidados. Sempre que quaisquer dados adicionados com expiração deslizante são acessados, a duração desses dados no cache é estendida. Por exemplo, se algum item com intervalo de deslizamento de 30 segundos não for acessado por 30 segundos, ele expirou. Da mesma forma, se for acessado em 30 segundos, a vida útil do item será excedida em mais 30 segundos no cache.
Caso de uso: Vamos supor que você tenha um aplicativo que pega as credenciais do usuário para ser acessada. Você deseja fornecer acesso ao usuário enquanto o usuário estiver ativo e usando o aplicativo. A expiração deslizante ajuda você nos casos em que a sessão pode ser mantida acompanhando os usuários ativos.
No exemplo abaixo, uma expiração deslizante de 5 minutos é adicionada ao produto:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Get product from database against given product ID Product product = FetchProductFromDB(1001); // Generate a unique cache key for this product string key = $"Product:{product.ProductID}"; // Create a new CacheItem for this product with expiry var cacheItem = new CacheItem(product); var expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5)); cacheItem.Expiration = expiration; cache.Insert(key, cacheItem); |
Despejo em NCache Expiração Absoluta Expiração deslizante
Estratégias de expiração padrão
NCache também permite adicionar expiração padrão para ajudá-lo a economizar o esforço de configurá-lo manualmente. Estes só podem ser configurados usando NCache Web Manager ou arquivos de configuração (mostrados posteriormente no blog). Seguem os valores padrão:
- Absoluto padrão
- Deslizar padrão
- Padrão Absoluto Mais Longo
- Deslizamento padrão mais longo
Os valores padrão por padrão são 5 segundos para todas as estratégias de expiração. Por favor consulte Expiração padrão explicado minuciosamente em NCache documentação.
Configurar expiração usando NCache Web Manager
Você pode habilitar a expiração e definir a duração usando NCache Gerenciador Web. Deixa-me mostrar-te como:
Configurar expiração usando arquivos de configuração
Você também pode habilitar a expiração em NCache usando o arquivo de configuração (config.ncconf) que está instalado em NCache diretório de instalação por padrão. Debaixo de etiqueta, existe uma etiqueta como mostrado abaixo:
1 2 3 4 5 |
<expiration-policy enabled="True"> <absolute-expiration longer-enabled="False" longer-value="5" default-enabled="False" default-value="30"/> <sliding-expiration longer-enabled="False" longer-value="5" default-enabled="False" default-value="20"/> </expiration-policy> |
Da mesma forma, você pode especificar o intervalo de limpeza após o qual os itens expirados são removidos do cache, conforme mostrado abaixo:
1 2 3 |
<cache-settings ... > <cleanup interval="15sec"/> </cache-settings> |
Remoção em massa de itens expirados
Todos os itens expirados no cache são removidos em massa para evitar o revés de desempenho causado pela remoção de itens individuais. No entanto, você pode configurar o tamanho em massa dos itens a serem removidos, bem como o atraso entre duas remoções em massa consecutivas de dados expirados. NCache vem com um Alachisoft.NCache.Service.exe.config arquivo colocado no diretório de instalação de NCache e tem as seguintes tags configuráveis:
1 2 |
<add key="NCacheServer.ExpirationBulkRemoveSize" value="10"/> <add key="NCacheServer.ExpirationBulkRemoveDelay" value="0"/> |
Configurando a expiração de dados Expiração e Despejo
Fatos para saber
- Se algum item for adicionado ao cache sem expiração (absoluta ou deslizante), ele permanecerá no cache para sempre até ser removido manualmente.
- Você terá que reiniciar o NCache service depois de configurar qualquer coisa usando os arquivos de configuração para que a alteração tenha efeito.
- In NCache, a expiração funciona de maneira diferente em relação a diferentes topologias, tudo é explicado detalhadamente em Expiração em ambiente clusterizado.
Resumindo!
Portanto, tudo o que discutimos até agora resume-se ao fato de que os dados obsoletos em seu cache precisam ser gerenciados com eficiência e a expiração é a maneira de fazê-lo. É uma técnica que expira os dados do cache com base na técnica fornecida por você. NCache ajuda você a lidar com essas coisas sem qualquer aborrecimento.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições