Atualizar/inserir dados existentes no cache
NCache fornece o Insert
e suas sobrecargas para facilitar a atualização de objetos no cache. Enquanto ele substitui os dados de itens existentes, ele também adiciona o item ao cache se a chave não existir no cache.
Pré-requisitos
- 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, CacheItemVersão, Item de cache, inserção, Get, Inserir em massa, Inserir Assíncrono.
Atualizar objeto no cache
Note
Este recurso também está disponível em NCache Professional.
Você pode atualizar um objeto personalizado no cache usando várias sobrecargas do Insert
método. Isso retorna um CacheItemVersion
.
importante
- Se a chave já existir, ela substituirá o item de cache existente com a mesma chave.
- Se a chave não existir, a operação adicionará o item ao cache.
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.
O exemplo a seguir obtém os valores de um objeto existente e o insere na mesma chave no cache. Se a chave não existir, ela será adicionada ao cache.
// Precondition: Cache is already connected
string customerKey = "ALFKI";
// Get updated product from database against given product ID
Customer customer = FetchProductFromDB("ALFKI");
// Insert Product object to cache
CacheItemVersion version = cache.Insert(customerKey, customer);
// Item updated in cache successfully
Atualizar Objeto com Expiração
Note
Este recurso também está disponível em NCache Professional.
CacheItem
é uma classe personalizada fornecida por NCache que pode ser usado para adicionar dados ao cache e também permite definir especificações adicionais associadas a um objeto como propriedades desta classe. O CacheItem é atualizado no cache em relação a uma chave exclusiva.
importante
- Se a chave já existir, ela substituirá o item de cache existente com a mesma chave.
- Se a chave não existir, a operação adicionará o item ao cache.
O exemplo a seguir obtém valores atualizados de um CacheItem existente e o insere na mesma chave no cache. Se a chave não existir, ela será adicionada ao cache.
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB("ALFKI");
// Update Customer's Phone
customer.Phone = "0921-12 34 65";
// Cretae CacheItem
CacheItem cacheItem = new CacheItem(customer);
cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
// Update cutsomer in DB and Cache
if (UpdateDB(customer))
{
cache.Insert(customerKey, cacheItem);
}
Atualizar itens em massa no cache
Note
Este recurso também está disponível em NCache Professional.
InsertBulk
atualiza uma série de CacheItem
para o cache em relação à chave correspondente. O método retorna um dicionário de todas as chaves que falharam na atualização, juntamente com o motivo da falha.
importante
Se alguma chave não for atualizada, os motivos da falha serão retornados como um IDictionary
.
O exemplo de código a seguir busca uma matriz de produtos (de Experiência e dinâmica de loja tipo) do banco de dados. Os produtos são então inseridos no cache como um dicionário de chaves e CacheItem
utilização InsertBulk
.
// 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, Customer> itemsFetched = cache.GetBulk<Customer>(keys);
//Create a dictionary to store updated items
IDictionary<string, CacheItem> itemsUpdated = new Dictionary<string, CacheItem>();
// Update postal codes of dictionary items
foreach (KeyValuePair<string, Customer> item in itemsFetched)
{
//Update Postal Code
item.Value.PostalCode = "05023";
// Create CacheItem of updated Customer object
CacheItem updatedCacheItem = new CacheItem(item.Value);
// Add uCacheItem to dictionary
itemsUpdated.Add(item.Key,updatedCacheItem);
}
if (UpdateDB(itemsUpdated))
{
// Insert updated bulk items to Cache
IDictionary<string, Exception> keysFailedToInsert = cache.InsertBulk(itemsUpdated);
if (keysFailedToInsert.Count > 0)
{
foreach (KeyValuePair<string, Exception> keyFailedToInsert in keysFailedToInsert)
Console.WriteLine($"Could not update Item {keyFailedToInsert.Key} in cache due to error : {keyFailedToInsert.Value}");
}
}
Atualizar objetos com API assíncrona
InsertAsync
retorna o objeto do Classe de tarefa que pode ainda ser usado de acordo com as necessidades de negócios do aplicativo cliente.
string customerKey = $"Customer:ALFKI";
// Get customer from database if not found in cache
if (customer == null)
customer = FetchCustomerFromDB("ALFKI");
// Update customer's Phone
customer.Phone = "12345-6789";
// Update cutsomer in DB and Cache
if (UpdateDB(customer))
{
// Adding item asynchronously.
Task<CacheItemVersion> task = cache.InsertAsync(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 updated with verion {version.Version}.");
}
}
Recursos adicionais
NCache fornece um aplicativo de amostra 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.