Scadenza scorrevole nella cache
Scadenza scorrevole in NCache È una strategia dinamica di gestione della memoria utilizzata per conservare i dati a cui si accede frequentemente, eliminando automaticamente i dati non utilizzati per un determinato periodo di tempo. Reimpostando il Time-to-Live (TTL) a ogni accesso, contribuisce a rimuovere i dati inattivi mantenendo nella cache gli elementi a cui si accede frequentemente.
La scadenza scorrevole garantisce che, se i dati vengono consultati entro l'intervallo di tempo specificato, il Time-to-Live (TTL) per quella specifica voce della cache venga reimpostato. Ciò impedisce la scadenza di quella particolare voce della cache e contribuisce a mantenere i dati aggiornati anche in caso di elevata attività dell'applicazione. Ad esempio, se viene aggiunta una sessione con una scadenza di 10 minuti e la sessione viene consultata al sesto minuto, la sua durata nella cache verrà estesa di altri 10 minuti.
Prerequisiti
Prima di usare il NCache Le API lato client devono garantire il rispetto dei seguenti prerequisiti:
- Installa i seguenti pacchetti NuGet nella tua applicazione client .NET:
- Includere i seguenti spazi dei nomi nell'applicazione:
- La cache deve essere in esecuzione.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Per i dettagli dell'API, fare riferimento a: ICache, CacheItem, contiene, Contare, Scadenza, inserire.
- Aggiungi le seguenti dipendenze Maven per la tua applicazione client Java in
pom.xml file:
<dependency>
<groupId>com.alachisoft.ncache</groupId>
<!--for NCache Enterprise-->
<artifactId>ncache-client</artifactId>
<version>x.x.x</version>
</dependency>
- Importa i seguenti pacchetti nell'applicazione client Java:
- La cache deve essere in esecuzione.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Per i dettagli dell'API, fare riferimento a: Cache, CacheItem, contiene, getCount, Scadenza, insert.
- Installa i seguenti pacchetti nella tua applicazione client Python:
- Importa i seguenti pacchetti nella tua applicazione:
- La cache deve essere in esecuzione.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Per i dettagli dell'API, fare riferimento a: Cache, CacheItem, contiene, get_count, insert, Scadenza.
- Installa e includi il seguente modulo nella tua applicazione client Node.js:
- Includi la seguente classe nella tua applicazione:
- La cache deve essere in esecuzione.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Per i dettagli dell'API, fare riferimento a: Cache, CacheItem, contiene, getCount, Scadenza, insert.
- Installa uno dei seguenti pacchetti NuGet nella tua applicazione client .NET:
- Enterprise:
Install-Package Alachisoft.NCache.SDK -Version 4.9.1.0
- Crea una nuova applicazione console.
- Assicurati che i dati aggiunti lo siano serializzabile.
- Aggiungi NCache Referenze individuando
%NCHOME%\NCache\bin\assembly\4.0 e aggiungendo Alachisoft.NCache.Web and Alachisoft.NCache.Runtime come appropriato.
- Includi il
Alachisoft.NCache.Web.Caching spazio dei nomi nell'applicazione.
- Per saperne di più sul NCache API legacy, scaricala NCache 4.9 documenti disponibili come file .zip file sul Alachisoft Sito web.
È possibile aggiungere o aggiornare gli elementi della cache per impostare la scadenza utilizzando inserire metodo. Il CacheItem è una classe personalizzata fornita da NCache che può essere utilizzato per aggiungere dati alla cache e consente anche di impostare metadati aggiuntivi associati a un oggetto di questa classe. Questi metadati definiscono le proprietà dell'elemento come scadenza, dipendenze e altro.
L'esempio seguente imposta il valore di Expiration immobile a Scadenza Scorrevole di 5 minuti per a CacheItem e lo aggiunge alla cache se la chiave non esiste e aggiorna l'elemento se esiste. Questo CacheItem verrà quindi rimosso dalla cache dopo 5 minuti.
Consiglio
Puoi monitorare/verificare la scadenza tramite:
- Contatore "Conteggio cache" nel file NCache Monitorare or Contatori PerfMon.
- utilizzando
cache.Contains una volta trascorso l'intervallo di scadenza.
- utilizzando
cache.Count prima e dopo aver specificato la scadenza.
try
{
// Precondition: Cache is already connected
// Get product from database against given product ID
Product product = FetchProductFromDB(1001);
// Generate a unique cache key for this product
string key = $"Product:{product.ProductID}";
// Create a new CacheItem for this product
var cacheItem = new CacheItem(product);
// Resetting TTL to optimize memory
var expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
cacheItem.Expiration = expiration;
// Add/Update item with expiration
cache.Insert(key, cacheItem);
}
catch (OperationFailedException ex)
{
// Exception can occur due to:
// Connection Failures
// Operation Timeout
// Operation performed during state transfer
}
catch (Exception ex)
{
// Any generic exception like ArgumentNullException or ArgumentException
}
try
{
// Precondition: Cache is already connected
// Get product from database against given product ID
Product product = fetchProductFromDB(1001);
// Generate a unique cache key for this product
String key = "Product:" + product.getProductID();
// Create a new CacheItem for this product
CacheItem cacheItem = new CacheItem(product);
// Set Expiration type and TimeSpan
Expiration expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
cacheItem.setExpiration(expiration);
// Add/Update item in cache with expiration
cache.insert(key, cacheItem);
}
catch (OperationFailedException ex)
{
// Exception can occur due to:
// Connection Failures
// Operation Timeout
// Operation performed during state transfer
}
catch (Exception ex)
{
// Any generic exception like IllegalArgumentException or NullPointerException
}
try:
# Precondition: Cache is already connected
# Get product from database
product = fetch_product_from_db()
# Generate a unique cache key for this product
key = "Product:" + product.get_product_id()
# Create a new CacheItem for this product
cache_item = ncache.CacheItem(product)
# Set Expiration type and TimeSpan
expiration = ncache.Expiration(ncache.ExpirationType.SLIDING, ncache.TimeSpan.from_minutes(5))
cache_item.set_expiration(expiration)
# Add/Update item in cache with expiration
cache.insert(key, cache_item)
except Exception as error:
# Exception can occur due to:
# Connection Failures
# Operation Timeout
# Operation during state transfer
print("An error occurred:", str(error))
try
{
// This is an async method
// Precondition: Cache is already connected
// Get product from database against given product ID
var product = this.fetchProductFromDB(1001);
// Generate a unique cache key for this product
var key = "Product:" + product.getProductID();
// Create a new CacheItem for this product
// You also need to specify the FQN (Fully Qualified Name) of the class
var cacheItem = new ncache.CacheItem(product,"FQN.Product");
// Set Expiration type and TimeSpan
var expiration = new ncache.Expiration(ncache.ExpirationType.Sliding, ncache.TimeSpan.FromMinutes(5));
cacheItem.setExpiration(expiration);
// Add/Update item in cache with expiration
await this.cache.insert(key, cacheItem);
}
catch (error)
{
// Handle errors
}
// Using NCache Enterprise 4.9.1
try
{
// Precondition: Cache is already connected
Product product = FetchProductFromDB("1001");
// Generate a unique cache key for this product
string key = $"Product:{product.ProductID}";
CacheItem cacheItem = new CacheItem(product);
// Adding sliding expiration of 5 min through Add API
cache.Add(key, product, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 5, 0), CacheItemPriority.Default);
}
catch (OperationFailedException ex)
{
// Exception can occur due to:
// Connection Failures
// Operation Timeout
// Operation performed during state transfer
}
catch (Exception ex)
{
// Any generic exception like ArgumentNullException or ArgumentException
}
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.
È possibile specificare la scadenza scorrevole nell'API utilizzando il file DefaultSliding and DefaultSlidingLonger valori configurati nel NCache Centro Direzionale o config.ncconf. Ciò offre la flessibilità di modificare il valore esternamente, se necessario, senza modificare il codice.
Il codice seguente associa la Scadenza predefinita configurata (DefaultSliding (in questo caso) con un elemento, lo aggiunge alla cache se la chiave non esiste, oppure aggiorna l'elemento esistente con la nuova scadenza. Se l'elemento non viene utilizzato entro l'intervallo di tempo configurato, scadrà. In caso contrario, la durata dell'elemento verrà estesa dello stesso intervallo di tempo.
Consigli
Per abilitare la scadenza predefinita, è obbligatorio abilitarla tramite il NCache Centro di gestione o config.ncconf. Se passi l'API per la scadenza predefinita e non è configurata tramite il file NCache Centro Direzionale o config.ncconf, non funzionerà.
// Precondition: Cache is already connected
// Get product from database against given product ID
Product product = FetchProductFromDB(1001);
// Generate a unique cache key for this product
string key = $"Product:{product.ProductID}";
// Create a cacheItem instance for product
var cacheItem = new CacheItem(product);
// Set Expiration TimeSpan
var expiration = new Expiration(ExpirationType.DefaultSliding);
cacheItem.Expiration = expiration;
// Resetting TTL to optimize memory
CacheItemVersion version = cache.Insert(key, cacheItem);
// Precondition: Cache is already connected
// Get product from database against given product ID
Product product = fetchProductFromDB(1001);
// Generate a unique cache key for this product
String key = "Product:" + product.getProductID();
// Create a cacheItem instance for product
CacheItem cacheItem = new CacheItem(product);
// Set Expiration type
Expiration expiration = new Expiration(ExpirationType.DefaultSliding);
cacheItem.setExpiration(expiration);
// Add/Update item into the cache with expiration
CacheItemVersion version = cache.insert(key, cacheItem);
# Precondition: Cache is already connected
# Get product from database against given product ID
product = fetch_product_from_db()
# Generate a unique cache key for this product
key = "Product:" + product.get_product_id()
# Create a new CacheItem for this product
cache_item = ncache.CacheItem(product)
# Set Expiration type and TimeSpan
expiration = ncache.Expiration(ncache.ExpirationType.DEFAULT_SLIDING)
cache_item.set_expiration(expiration)
# Add/Update item in cache with expiration
version = cache.insert(key, cache_item)
// Precondition: Cache is already connected
// This is an async method
// Get product from database against given product ID
var product = this.fetchProductFromDB(1001);
// Generate a unique cache key for this product
var key = "Product:" + product.getProductID();
// Create a cacheItem instance for product
// You also need to specify the FQN(Fully Qualified Name) of the class
var cacheItem = new ncache.CacheItem(product,"FQN.Product");
// Set Expiration type
var expiration = new ncache.Expiration(ncache.ExpirationType.DefaultSliding);
cacheItem.setExpiration(expiration);
// Add/Update item into the cache with expiration
var version = await this.cache.insert(key, cacheItem);
// Using NCache Enterprise 4.9.1
// Precondition: Cache is already connected
// Get product from database against given product ID
Product product = FetchProductFromDB(1001);
// Generate a unique cache key for this product
string key = $"Product:{product.ProductID}";
CacheItem cacheItem = new CacheItem(product);
// Adding Default Sliding expiration with configured value
cache.Add(key, product, null, Cache.NoAbsoluteExpiration, Cache.DefaultSliding, CacheItemPriority.Default);
Risorse addizionali
NCache fornisce un'applicazione di esempio per Scadenza scorrevole attiva GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.Memorizzazione.della.cache spazio dei nomi.
Giava: com.alachisoft.ncache.runtime.caching spazio dei nomi.
Pitone: memorizzazione nella cache di ncache.runtime modulo.
Node.js: Scadenza classe.