Comportamento e utilizzo del contatore nella cache
Un contatore è un struttura dati a valore lungo singolo memorizzato nella cache. È possibile incrementare, decrementare, bloccare e registrare eventi. Ad esempio, un contatore può essere utilizzato per memorizzare le visualizzazioni ogni volta che un video viene visualizzato su un sito di social media. Può anche essere utilizzato per memorizzare le iscrizioni a un sito web in cui gli utenti possono iscriversi o annullare l'iscrizione. NCache migliora ulteriormente questo contatore fornendo NCache-funzioni specifiche come Gruppi, Tags, Scadenza, Blocco, dipendenze, e altro ancora. Ad esempio, puoi specificare un contatore per il gruppo AbbonamentoDettagli che può contenere oggetti cliente oltre al contatore abbonamenti.
Comportamento
- Null non è un tipo di valore supportato.
- I contatori sono nominati. Pertanto, è necessario fornire una chiave cache univoca per un contatore.
Prerequisiti
Prima di usare il NCache Per le API lato client, assicurarsi che siano soddisfatti i seguenti prerequisiti:
- Installa i seguenti pacchetti NuGet nella tua applicazione client .NET:
- Impresa: Alachisoft.NCache.Sdk
- Open Source: Alachisoft.NCache.SDK open source
- 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, Contatore, IdataTypeManager, Crea contatore, Valore impostato, Incremento, Incremento di, diminuzione, Decrementa, Ottieni contatore, ICollection Manager, Notifica di registrazione, DataTypeDataNotificationRichiamata, Tipo di evento, DataTypeEventDataFilter, bloccare, Sbloccare, DataType Manager, DataTypeEventArg.
Crea contatore
L'esempio di codice seguente mostra come è possibile creare un contatore nella cache utilizzando CreateCounter contro la chiave della cache AbbonamentoContatore.
Consiglio
Puoi anche configurare gli attributi ricercabili come Gruppi/Tag/Tag con nome e attributi di invalidamento come scadenza/eliminazione/dipendenza durante la creazione di una struttura dati.
try
{
// Precondition: Cache is already connected
// Specify unique cache key for counter
string key = "SubscriptionCounter";
// Set initial value of counter
long initialValue = 15;
// Create counter
ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue);
}
catch (OperationFailedException ex)
{
// NCache specific exception
if(ex.ErrorCode == NCacheErrorCodes.KEY_ALREADY_EXISTS)
{
// The specified key already exists in the cache,
// Either remove the existing object from the cache
// Or specify another key
}
else
{
// NCache specific exception
// Exception can occur due to:
// Connection Failures
// Operation Timeout
// Operation performed during state transfer
}
}
catch (Exception ex)
{
// Any generic exception like ArgumentNullException or ArgumentException
}
Recupera e aggiorna il valore del contatore
Puoi aggiornare il valore di un contatore dopo la sua creazione. L'esempio di codice seguente recupera un contatore dalla cache utilizzando GetCounter e imposta il suo valore su un altro valore, utilizzando SetValue. Quindi incrementa il suo valore utilizzando Increment or IncrementBy e ne decrementa il valore utilizzando Decrement or DecrementBy.
// Precondition: Cache is already connected
// Unique key for counter
string key = "SubscriptionCounter";
// Get counter against key
ICounter retrievedCounter = cache.DataTypeManager.GetCounter(key);
// Set value of counter to 100
retrievedCounter.SetValue(100);
// Increment value
long newValue = retrievedCounter.Increment();
// Decrement value
newValue = retrievedCounter.Decrement();
// Increment value by 10
newValue = retrievedCounter.IncrementBy(10);
// Decrement value by 5
newValue = retrievedCounter.DecrementBy(5);
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.
Notifiche di eventi sui contatori
È possibile registrare eventi cache, eventi basati su chiavi ed eventi struttura dati su una struttura dati come un contatore. Per il comportamento, fare riferimento a caratteristica comportamento saggio.
L'esempio di codice seguente registra un evento cache di ItemAdded and ItemUpdated così come registra un evento per ItemAdded and ItemUpdated sul contatore nella cache. La creazione di un contatore attiva un ItemAdded evento a livello di cache. Quando il valore del contatore viene modificato, un ItemUpdated evento della struttura dati e un ItemUpdated Vengono attivati gli eventi a livello di cache.
Registra evento sul contatore creato
// Precondition: Cache is already connected
// Unique cache key for counter
string key = "SubscriptionCounter";
// Set initial value of counter
long initialValue = 15;
// Create counter
ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue);
// Register ItemAdded, ItemUpdated, ItemRemoved events on counter created
// DataTypeNotificationCallback is callback method specified
counter.RegisterNotification(DataTypeDataNotificationCallback,
EventType.ItemAdded,
DataTypeEventDataFilter.Data);
// Perform operations
Specificare la richiamata per la notifica dell'evento
private void DataTypeDataNotificationCallback(string collectionName, DataTypeEventArg collectionEventArgs)
{
if (collectionEventArgs.EventType == EventType.ItemUpdated)
{
if (collectionEventArgs.CollectionItem != null)
{
// Counter value has been updated
// Perform operations
}
}
}
Contatore di blocco
I contatori possono essere bloccati e sbloccati in modo esplicito per garantire la coerenza dei dati. L'esempio di codice seguente crea un contatore e lo blocca per un periodo di 10 secondi utilizzando bloccare e poi lo sblocca usando Sbloccare.
// Precondition: Cache is already connected
// Counter exists with key "SubscriptionCounter"
// Cache Key
string key = "SubscriptionCounter";
// Get counter against key
ICounter counter = cache.DataTypeManager.GetCounter(key);
// Lock counter for 10 seconds
bool isLocked = counter.Lock(TimeSpan.FromSeconds(10));
if (isLocked)
{
// Counter is successfully locked for 10 seconds
// Unless explicitly unlocked
}
else
{
// Counter is not locked because either:
// Counter is not present in the cache
// Counter is already locked
}
counter.Unlock();
Risorse addizionali
NCache fornisce un'applicazione di esempio per la struttura dei dati del contatore GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.Tipi.dati.client spazio dei nomi.
Giava: com.alachisoft.ncache.client.datastructures spazio dei nomi.
Node.js: contatore classe.