Manipulação de dados de cache do contexto EF Core
Depois de se conectar com sucesso ao cache e obter um identificador de cache válido, você pode adicionar dados ao cache. NCache fornece o Add
e suas sobrecargas para facilitar a adição de objetos ao cache pela primeira vez.
Pré-requisitos para usar o identificador de dados de cache do contexto do EF Core
- Para aprender sobre os pré-requisitos padrão necessários para trabalhar com todos os NCache recursos do lado do cliente, consulte a página fornecida em Pré-requisitos da API do lado do cliente.
- Para detalhes da API, consulte: ICache, Adicionar, inserção, Item de cache , CacheItemVersão, Contar, contém, Adicionar em massa, AdicionarAsync.
Adicionar objeto ao cache
Note
Este recurso também está disponível em NCache Professional.
Você pode adicionar um objeto de uma classe personalizada ao cache usando várias sobrecargas do Add
método.
Aviso
Se a chave já existir, a exceção "A chave especificada já existe" será lançada.
O exemplo a seguir adiciona um objeto do tipo Produto class e sua chave associada no cache. Isso retorna CacheItemVersion
. A amostra de código verifica se a chave foi adicionada com êxito ao cache ou não.
Dica
Uma maneira rápida de verificar se um item foi adicionado é usar uma das seguintes propriedades da classe Cache:
Count
retorna o número de itens presentes no cache.Contains
verifica se uma chave especificada existe no cache.
// Precondition: Cache is already connected
// Get customer from database
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
// Get customer from database if not found in cache
if (customer == null)
{
// Get customer from database
customer = FetchCustomerFromDB("ALFKI");
cache.Add(customerKey, customer);
}
// Item added in cache successfully
Note
Para garantir que a operação seja à prova de falhas, é recomendável lidar com possíveis exceções em seu aplicativo, conforme explicado em Como lidar com falhas.
Adicionar um objeto com expiração
Note
Este recurso também está disponível em NCache Professional.
Você pode adicionar dados com metadados ao cache encapsulando-os no NCache CacheItem
classe.
O exemplo a seguir adiciona um básico CacheItem
contendo o Experiência e dinâmica de loja objeto no cache. Propriedades adicionais serão definidas em relação ao CacheItem
em capítulos sucessivos.
// Get customer from database if not found in cache
if (customer == null)
{
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
// You can use CacheItem object to add metadata along with data to cache
// CacheItem comprises of certain properties such as Expiration which are explained in successive chapters
CacheItem customerCacheItem = new CacheItem(customer);
customerCacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
cache.Add(customerKey, customerCacheItem);
}
Adicionar itens em massa aos dados de cache
Note
Este recurso também está disponível em NCache Professional.
AddBulk
adiciona uma matriz de CacheItem
para o cache com as chaves de cache correspondentes. Esse método retorna um dicionário de todas as chaves que não foram adicionadas, juntamente com o motivo da falha.
Note
Para quaisquer chaves que não sejam adicionadas, o motivo da falha será retornado como um IDictionary
.
O código a seguir adiciona uma grande quantidade de itens de produto ao cache. Se houver alguma chave que não foi adicionada, as chaves podem ser tratadas de acordo com suas necessidades de negócios.
// Create an array of all Customer Keys
String[] keys = new String[]
{
"Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS"
};
// Get items from cache
IDictionary<string, CacheItem> itemsFetched = cache.GetCacheItemBulk(keys);
// Fetch items from DB which do not exist in Cache
if (itemsFetched.Count < keys.Length)
{
//Create dictionary of items to be added to cache
IDictionary<string, CacheItem> missingItems = new Dictionary<string, CacheItem>();
foreach (string key in keys)
{
if (!itemsFetched.ContainsKey(key))
{
Customer customer = FetchCustomerFromDB(key);
CacheItem cacheItem = new CacheItem(customer);
missingItems.Add(key, cacheItem);
}
}
// Add bulk items to Cache
IDictionary<string, Exception> keysFailedToAdd = cache.AddBulk(missingItems);
if (keysFailedToAdd.Count > 0)
{
foreach( KeyValuePair<string,Exception> keyFailedToAdd in keysFailedToAdd)
Console.WriteLine($"Could not add Item {keyFailedToAdd.Key} in cache due to error : {keyFailedToAdd.Value}");
}
}
Adicionar objetos com API assíncrona
AddAsync
adiciona um item ao cache de forma assíncrona e retorna um objeto do Classe de tarefa que pode ser usado de acordo com as necessidades de negócios do aplicativo cliente.
if (customer == null)
{
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
//Adding item asynchronously.You can also add data by creating a CacheItem object which stores meta data as well
Task<CacheItemVersion> task = cache.AddAsync(customerKey, customer);
//This task object can be used as per your business needs
if (task.IsCompleted)
{
// Get CacheItemVersion object from task result
CacheItemVersion version = task.Result;
Console.WriteLine($"Item {customer.CustomerID} has been added to cache with verion {version.Version}.");
}
}
Usando ICache.Add para Bloqueio Distribuído
Devido à sua natureza versátil, outro uso amplo da operação Add é no bloqueio do cache caso ele esteja sendo usado por vários aplicativos.
Por exemplo, um ambiente é definido de forma que, assim que qualquer aplicativo se conecta ao cache, ele adiciona uma chave específica que é conhecida por todos os aplicativos. E assim que o aplicativo termina de usar o cache, ele remove a chave do cache. Se a chave for adicionada com sucesso, ela poderá continuar a usar o cache de acordo com sua lógica. Porém, se a chave já existir, significa que o cache já está sendo utilizado por uma aplicação e está “bloqueado”.
Isso é descrito em etapas no diagrama a seguir:
O App A e o App B adicionam a chave "WorkStarted" assim que o aplicativo é iniciado.
A chave passada pelo App A é adicionada ao cache antes daquela passada pelo App B.
O aplicativo B recebe uma exceção "A chave especificada já existe". Neste cenário, o App B aguardará que o App A termine seu trabalho, ou seja, até que possa adicionar com êxito a chave "WorkStarted".
O App A remove a chave do cache depois de concluir seu trabalho.
O App B adiciona a chave ao cache novamente.
A chave é adicionada com sucesso pelo App B, bloqueando o cache para outros aplicativos.
Recursos adicionais
NCache fornece o aplicativo de exemplo para Operações Básicas em GitHub.
Veja também
.INTERNET: Alachisoft.NCache.Cliente espaço para nome.
Java: com.alachisoft.ncache.cliente espaço para nome.
Node.js: Esconderijo classe.
Pitão: ncache.cliente classe.