Atualmente, a maioria dos aplicativos de usuário que dependem de chamadas pesadas de banco de dados está incorporando cache distribuído para melhor desempenho e escalabilidade linear. Para este propósito, o usuário deseja que sempre que ocorram alterações no banco de dados, a alteração seja imediatamente refletida no cache também. NCache sendo um cache distribuído na memória, nos fornece técnicas diferentes para propósitos semelhantes para manter os dados atualizados no cache.
Em primeiro lugar, NCache fornece Expiration onde os dados são removidos automaticamente do cache após um intervalo predefinido. Em segundo lugar, vem a estratégia de Dependência de cache no banco de dados onde os dados em cache permanecem sincronizados com o banco de dados e são invalidados sempre que são alterados. Da mesma forma, vem outro mecanismo que é Atualizador de cache que é executado em segundo plano em intervalos programados e mantém os dados atualizados e atualizados de maneira controlada.
Este blog explica as diferentes estratégias do Cache Refresher e como ele mantém os dados atualizados no cache.
NCache Adicionar ao carrinho Documentos de expiração Carregador e Atualizador de Cache
Atualizador de cache: visão geral e conceito
Vamos supor que o usuário execute um canal de streaming de vídeo e armazene em cache algumas novas informações junto com seus respectivos vídeos no cache. Por um longo período de tempo, os vídeos no cache permanecem inalterados, mas agora, por algum motivo, alguns novos vídeos são adicionados e outros são atualizados no banco de dados. Isso faz com que os usuários visualizem os vídeos mais antigos (dados obsoletos) que já foram atualizados.
NCache fornece Atualizador de cache recurso que mantém os dados no cache atualizados, atualizando-os em um intervalo de atualização específico. A atualização de dados de cache inclui adicionar, atualizar e removê-los sempre que os dados forem alterados na fonte de dados.
Para configurar o Cache Refresher, o usuário primeiro precisa implementar Carregador de inicialização de cache. Esse carregador é usado para pré-carregar os dados no cache na inicialização do cache na forma de conjuntos de dados que representam uma maneira de agrupar diferentes tipos de dados para obter paralelismo. Sempre que o cache é iniciado, o Cache Loader busca automaticamente os dados da fonte de dados nos conjuntos de dados configurados. Para manter esses dados pré-carregados atualizados e sincronizados com os dados atualizados na fonte de dados, é usado o Cache Refresher, que atualiza esses conjuntos de dados separadamente após um intervalo de tempo programado.
Diferentes propriedades do atualizador de cache
Existem algumas propriedades do Cache Refresher que o usuário precisa conhecer antes de iniciar a implementação. Abaixo estão explicados os detalhes que precisam ser mantidos em mente.
- Conjuntos de dados: Um conjunto de dados é uma maneira de o usuário agrupar diferentes tipos de dados para que possam carregá-los ou atualizá-los separadamente em diferentes intervalos ou eventos para obter paralelismo.
- Agendamento do conjunto de dados: Os conjuntos de dados são atualizados de acordo com uma programação de conjunto de dados. Este cronograma pode ser: Horário diário, intervalo diário, semanal e Mensal. Todos eles, que, em sua implementação exclusiva, decidem o tempo exato após o qual um conjunto de dados precisa ser atualizado. Cada conjunto de dados pode ter seu próprio agendamento de atualização. Um exemplo pode ser isso, atualize o vídeo sobre o conjunto de dados produtos de confeitaria todos os domingos ao meio-dia de cada mês. Para mais detalhes, consulte Agendamento de conjunto de dados no Documentos.
- Intervalo de atualização: É um intervalo após o qual um thread é executado para verificar os conjuntos de dados que estão prontos para serem atualizados quando o horário programado chegar. Cada conjunto de dados tem um intervalo de atualização agendado diferente, mas esse intervalo permanece o mesmo no nível do cache. Este intervalo pode ser definido para um mínimo de 15 minutos e um máximo de 60 minutos, respectivamente.
Carregador de cache e documentos de atualização Documentos de dependência de cache
Como implementar a atualização de cache?
Para implementação com Cache Refresher, primeiro o usuário precisa configurar o ICacheLoaderName interface. Em segundo lugar, NCache chama o método LoadDatasetOnStartup implementado para carregar dados no cache. Em seguida, ele usa o método RefreshDataset para atualizar os dados carregados no cache pelo Cache Loader.
Vamos supor que o usuário tenha dois vídeos no banco de dados, um reclassificando produtos de panificação e outro de vestuário. A implementação a seguir pré-carrega vídeos no cache e, em seguida, para qualquer atualização, atualiza os dados em um intervalo de atualização separado para ambos.
Inicialize o cache e a conexão
O método Init é chamado na inicialização do cache para configurar a conexão. Abaixo está um exemplo de implementação de Nisso método da interface ICacheLoader. Aqui abrimos uma conexão SQL e inicializamos um cache com o nome dado pelo usuário.
1 2 3 4 5 6 7 8 |
public void Init(IDictionary<string, string> parameters, string cacheName) { string connectionString = parameters["connectionString"] as string; connection = new SqlConnection(connectionString); connection.Open(); cache = CacheManager.GetCache(cacheName); } |
Carregar conjuntos de dados no cache
Na segunda etapa, o usuário usa LoadDatasetOnStartup, um método chamado na inicialização do cache para carregar conjuntos de dados especificados no cache do banco de dados para pré-preencher o cache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public object LoadDatasetOnStartup(string dataset) { // Create a list of datasets to load at cache startup IList<object> datasetToLoad; switch (dataSet.ToLower()) { // If dataset is "products", fetch products from data source to load in cache case "products": datasetToLoad = FetchProductsFromDataSource(); // Insert fetched product in the cache foreach (var product in datasetToLoad) { string key = $"ProductID:{product.Id}"; cache.Insert(key, product); } break; default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache object userContext = DateTime.Now; return userContext; } |
Atualizar conjuntos de dados carregados
Em terceiro lugar, para atualizar conjuntos de dados em intervalos periódicos, o usuário deve fornecer a implementação de Atualizar conjunto de dados. Aqui, o usuário deve atualizar os dados já pré-carregados carregados pelo Cache Loader, adicionar novos dados ou remover os dados desse conjunto de dados específico.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public object RefreshDataset(string dataset, object userContext) { *DateTime? lastRefreshTime; switch (dataset.ToLower()) { // If dataset is "bakery products", fetch updated products from data source case "bakery products": lastRefreshTime = userContext as DateTime?; IList<Product> productsToRefresh = FetchUpdatedProducts(lastRefreshTime) as IList<Product>; // Insert updated products in the cache foreach (var product in productsToRefresh) { string key = $"ProductID:{product.Id}"; CacheItem cacheItem = new CacheItem(product); _cache.Insert(key, cacheItem); } break; default: // Invalid dataset } // User context is the time at which datasets were refreshed userContext = DateTime.Now; return userContext; } |
Implementar atualização baseada em pesquisa
Agora vem o método GetDatasetsToRefresh, que é chamado a cada intervalo de atualização e só deve ser fornecido se o usuário quiser usar sua própria lógica personalizada para controlar o tempo de atualização para diferentes conjuntos de dados carregados. Esses conjuntos de dados retornados são atualizados imediatamente ou no mesmo dia informado.
Atualizar conjunto de dados sob demanda
Por fim, o usuário também tem a opção de atualizar seus conjuntos de dados pré-configurados em tempo de execução por meio do Invocar-RefreshDataset cmdlet. Aqui, os conjuntos de dados podem ser atualizados imediatamente ou nas próximas 24 horas usando o RefreshPreference
opção. Um exemplo é mostrado abaixo em que o produto do conjunto de dados é atualizado imediatamente no demoClusteredCache
no servidor 20.200.20.11.
1 |
Invoke-RefresherDataset -CacheName demoClusteredCache -Server 20.200.20.11 -Dataset product -RefreshPreference RefreshNow |
Configure o Cache Loader e o Refresher por meio de NCache Web Manager
Uma vez que o usuário tenha implementado o Cache Startup Loader and Refresher, ele pode configurar ambos através do Web Manager e definir o intervalo de atualização de acordo com suas necessidades. Abaixo está como isso pode ser feito.
Configurar o Carregador e Atualizador de Cache Configurando a expiração de dados
Finalizando o Blog!
Chegando ao final, tudo o que foi discutido até agora diz que o cache precisa ser atualizado de forma eficiente e o Cache Refresher é a melhor maneira de fazê-lo. Ele atualiza os dados do cache se ocorrer alguma alteração no banco de dados de maneira muito sistemática. Assim como o Atualizador de Cache, NCache fornece muitos recursos interessantes que podem ser executados sem qualquer inconveniente. Confira o nosso site para mais detalhes!
NCache Adicionar ao carrinho Baixar NCache Comparação de edições