A maioria das empresas de comércio eletrônico florescentes de hoje sofreram com um tempo de reação lento do site em algum momento do passado. Isso se deve em parte a uma mudança de paradigma nas preferências do usuário – mais inclinado à compra online. Portanto, os mecanismos tradicionais não conseguiram sustentar o fluxo de solicitações de clientes.
Com o advento de soluções de cache distribuído em memória, linearmente escaláveis, como NCache, houve melhorias significativas nos tempos de resposta de negócios. A maioria das empresas prósperas tem uma camada de cache em sua arquitetura de sistema – o que deu um boom substancial para as empresas inicialmente.
NCache Adicionar ao carrinho NCache Documentos do carregador NCache Guia de administração do carregador
O que é um Cache Loader?
Antes de prosseguir, vamos considerar um cenário – sua empresa planeja introduzir um desconto de venda instantânea à meia-noite. É quando o fluxo de solicitações de usuários começará. Então, que tal você carregar seu cache com os detalhes relevantes do desconto antes que a venda comece oficialmente. Dessa forma, uma vez que você seja bombardeado com solicitações de usuários, estará equipado com as informações relevantes para lidar com elas.
Soluções de cache empresarial como NCache ajudar a superar esse atraso de desempenho inicial, incorporando um recurso de cache especial - carregador de inicialização do cache para pré-carregar seu cache. NCache expõe um ICacheLoaderName interface que você pode implementar e, em seguida, implantar no servidor. Com base em sua lógica, os dados são pré-carregados no cache como um processo em segundo plano, na inicialização.
A NCache ICacheLoaderName interface expõe os três métodos a seguir – Nisso, dispor e LoadDatasetOnStartup que você pode personalizar o código com base em seus requisitos de negócios:
1 2 3 |
public void Init(IDictionary<string, string> parameters, string cacheName); public object LoadDatasetOnStartup(string dataset); public void Dispose(); |
Recursos do carregador de cache
Vindo com um rico conjunto de recursos, o NCache carregador de inicialização ajuda a promover uma experiência de usuário aprimorada. Ele é desenvolvido, mantendo os problemas do cliente em consideração, enquanto procura maneiras de resolvê-los.
Para ajudá-lo a formar uma compreensão mais profunda do tópico, vamos analisar o núcleo NCache características do carregador abaixo:
Facilmente configurável
A ICacheLoader
interface é fácil de configurar. Você só precisa implementá-lo e, em seguida, implantar sua lógica por meio do NCache Gerente no lado do servidor. Ao habilitar o recurso de carregador de cache, seu código é executado automaticamente na inicialização do cache.
Conjuntos de dados lógicos
Se você estiver trabalhando em um cluster de cache de vários nós, poderá dividir seus dados em conjuntos lógicos e NCache acelera o processo de carregamento de dados atribuindo esses grupos a nós de cluster de forma round-robin.
Digamos que você tenha um cluster de dois nós e sua empresa exija que você carregue dois conjuntos de dados: products
e suppliers
. Simplesmente inclua-os em sua lógica de interface e especifique-os conjuntos de dados na sua configuração de cache. NCache iniciará o carregamento de dados em ambos os nós do cluster em paralelo.
Abaixo está um exemplo de implementação do método LoadDatasetOnStartup:
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 27 28 29 30 31 32 33 |
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; // If dataset is "suppliers", fetch suppliers from data source to load in cache case "suppliers": // load suppliers from database and add the cache. break; default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache object userContext = DateTime.Now; return userContext; } |
Um serviço de carregador dedicado
NCache usa um serviço de carregador dedicado em cada um dos nós do servidor para ajudar a melhorar a velocidade geral do cache. Esta é uma crítica NCache recurso porque se um grande conjunto de dados precisar de pré-carregamento no cache, o serviço de carregador separado garante que isso não prejudique o desempenho regular do cache.
NCache Adicionar ao carrinho Documentos da Interface ICacheLoader NCache Guia de provedores de implantação
Use NCache Atualizador para recarregar dados de cache
Embora saibamos o quanto um cache pré-carregado pode ser útil, há uma chance significativa de os dados do cache ficarem obsoletos se houver atualizações periódicas na fonte de dados de back-end. Nesses cenários, os dados preenchidos no cache não permanecem significativos – falhando em cumprir completamente a finalidade de um cache pré-carregado.
Continuando com o exemplo de e-commerce da seção anterior, digamos que, na primeira fase, você estava oferecendo um desconto fixo de 25% em itens selecionados, mas de repente você decide aumentar o percentual de desconto para 50% e aplicá-lo a todo o estoque – o que acontece com os dados de cache existentes? Agora está desatualizado – o que significa que você precisa de um mecanismo para atualizar o conjunto de dados relevante no cache.
NCache tem uma solução para tais situações – Permite que seus usuários atualizem o cache periodicamente com os dados mais recentes da fonte. Você pode fazer isso tanto agendando seus conjuntos de dados ou por invocando o atualizador sob demanda.
Se você puder prever quando seu cache precisará ser atualizado, poderá implementar o RefreshDataset
método da interface e escolha um intervalo de tempo apropriado que pode ser horas, dias, semanas ou meses.
Abaixo está um exemplo de implementação do método Atualizar conjunto de dados:
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 27 28 29 |
public object RefreshDataset(string dataset, object userContext) { DateTime? lastRefreshTime; switch (dataset.ToLower()) { // If dataset is "products", fetch updated products from data source case "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; // If dataset is "supplier", fetch updated suppliers from data source case "suppliers": lastRefreshTime = userContext as DateTime?; // fetch all suppliers updated since ‘lastRefreshTime’ and insert in cache. break; default: // Invalid dataset } // User context is the time at which datasets were refreshed userContext = DateTime.Now; return userContext; } |
Se, por outro lado, você não tiver certeza de quando seus dados de cache ficarão desatualizados, poderá implementar o GetDatasetsToRefresh método no ICacheLoader
interface para localizar programaticamente os conjuntos de dados que foram alterados e atualizá-los. Você também pode usar o PowerShell Invocar-RefresherDataset cmdlet para atualizar o cache sob demanda.
1 |
public IDictionary<string, RefreshPreference> GetDatasetsToRefresh(IDictionary<string, object> userContexts); |
Conclusão
Um carregador de cache não é mais apenas uma opção – é um recurso obrigatório para empresas que desejam expandir sua clientela globalmente, porque nesta era de ritmo acelerado e competitivo, a face frontal do seu negócio nunca pode cair. Então, se você estiver procurando por uma solução de cache distribuído como NCache para ajudar a crescer o seu negócio, entrar em contato conosco e deixe nossos especialistas técnicos ajudá-lo!
NCache Adicionar ao carrinho Baixar NCache Comparação de edições