Aggiungi dati alla cache
Dopo esserti connesso correttamente alla cache e aver ottenuto un handle di cache valido, puoi aggiungere dati alla cache. NCache fornisce il Add
metodo e i suoi sovraccarichi per facilitare l'aggiunta di oggetti alla cache per la prima volta.
Prerequisites to Add Data to Cache
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache caratteristiche lato client si prega di fare riferimento alla pagina indicata su Prerequisiti dell'API lato client.
- Per i dettagli dell'API fare riferimento a: ICache, Aggiungi, inserire, CacheItem , CacheItemVersion, Contare, contiene, Aggiungi Bulk, AggiungiAsync.
Aggiungi oggetto alla cache
Note:
Questa funzionalità è disponibile anche in NCache Professional.
Puoi aggiungere un oggetto di una classe personalizzata alla cache usando vari overload di Add
metodo.
avvertimento
Se la chiave esiste già, verrà generata l'eccezione "La chiave specificata esiste già".
L'esempio seguente aggiunge un oggetto di Prodotto class e la chiave associata nella cache. Questo ritorna CacheItemVersion
. L'esempio di codice verifica quindi se la chiave è stata aggiunta correttamente alla cache o meno.
Consiglio
Un modo rapido per verificare se un elemento è stato aggiunto consiste nell'utilizzare una delle seguenti proprietà della classe Cache:
Count
restituisce il numero di elementi presenti nella cache.Contains
verifica se nella cache esiste una chiave specificata.
// 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:
Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
Aggiungi un oggetto con scadenza
Note:
Questa funzionalità è disponibile anche in NCache Professional.
Puoi aggiungere dati con metadati alla cache incapsulandoli nel file NCache CacheItem
classe.
L'esempio seguente aggiunge una base CacheItem
contenente la oggetto nella cache. Ulteriori proprietà verranno impostate rispetto al CacheItem
nei capitoli successivi.
// 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);
}
Aggiungi elementi in blocco ai dati della cache
Note:
Questa funzionalità è disponibile anche in NCache Professional.
AddBulk
aggiunge una matrice di CacheItem
alla cache con le chiavi della cache corrispondenti. Questo metodo restituisce un dizionario di tutte le chiavi che non sono state aggiunte, insieme al motivo dell'errore.
Note:
Per tutte le chiavi che non vengono aggiunte, il motivo dell'errore verrà restituito come un IDictionary
.
Il codice seguente aggiunge un grosso numero di articoli di prodotto alla cache. Se sono presenti chiavi che non sono state aggiunte, le chiavi possono essere gestite in base alle esigenze aziendali.
// 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}");
}
}
Aggiungi oggetti con l'API asincrona
AddAsync
aggiunge un elemento alla cache in modo asincrono e restituisce un oggetto di Classe di attività che può essere ulteriormente utilizzato in base alle esigenze aziendali dell'applicazione client.
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}.");
}
}
Utilizzo di ICache.Add per il blocco distribuito
A causa della sua natura versatile, un altro ampio utilizzo dell'operazione Aggiungi è nel bloccare la cache se viene utilizzata da più applicazioni.
Ad esempio, un ambiente è impostato in modo tale che non appena un'applicazione si connette alla cache, aggiunge una chiave specifica nota a tutte le applicazioni. E una volta che l'applicazione ha terminato di utilizzare la cache, rimuove la chiave dalla cache. Se la chiave viene aggiunta correttamente, può procedere a utilizzare la cache secondo la sua logica. Tuttavia, se la chiave esiste già, significa che la cache è già utilizzata da un'applicazione ed è "bloccata".
Questo è descritto nei passaggi nel diagramma seguente:
App A e App B aggiungono la chiave "WorkStarted" non appena l'applicazione viene avviata.
La chiave passata dall'App A viene aggiunta alla cache prima di quella passata dall'App B.
L'app B riceve un'eccezione "La chiave specificata esiste già". In questo scenario, l'App B attenderà che l'App A finisca il suo lavoro, ovvero finché non potrà aggiungere con successo la chiave "WorkStarted".
L'app A rimuove la chiave dalla cache una volta terminato il suo lavoro.
L'app B aggiunge nuovamente la chiave alla cache.
La chiave viene aggiunta correttamente dall'App B, bloccando la cache per altre applicazioni.
Risorse addizionali
NCache fornisce l'applicazione di esempio per Operazioni di base su GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.Cliente spazio dei nomi.
Giava: com.alachisoft.ncache.cliente spazio dei nomi.
Node.js: Cache classe.
Pitone: ncache.cliente classe.