Nella vita di tutti i giorni, devi aver avuto un'esperienza quando un cartone di latte è rimasto nel tuo frigorifero per più di un po' e ti sei dimenticato di buttarlo via. Quello che succede dopo è che hai del latte raffermo nel tuo frigorifero, occupa spazio, non serve e può essere dannoso solo se consumato. Allo stesso modo, anche i tuoi dati nella cache dovrebbero avere una data di scadenza. Tutti i dati conservati a lungo nella cache diventano obsoleti (come il latte), non servono a nulla e occupano solo spazio nella cache. E la soluzione in entrambi i casi è simile: buttalo fuori!
Questo blog spiega le strategie di scadenza per mantenere aggiornati i dati nella cache e buttare via i dati obsoleti.
Scadenza dei dati della cache: la necessità e il concetto
Supponiamo che tu stia gestendo un sito di e-commerce e che tu abbia aggiunto le informazioni di questi prodotti nella cache. Per un lungo periodo di tempo, le informazioni sui prodotti vengono conservate nella cache senza essere modificate. Ma ora, per qualche motivo, i prezzi di alcuni prodotti sono stati aggiornati nell'origine dati. In questo caso, si verifica un'incoerenza dei dati perché i tuoi clienti stanno ancora visualizzando i prezzi precedenti, che in realtà sono i dati memorizzati nella cache non aggiornati.
NCache fornisce una scadenza dove puoi impostare un limite di tempo con i tuoi dati e, una volta raggiunto il limite, i dati non sono più validi. I dati invalidati devono essere rimossi dalla cache dopo un predefinito Intervallo pulito. È un intervallo (impostato dall'utente) dopo il quale tutti gli elementi scaduti vengono automaticamente rimossi dalla cache. Pertanto, qualsiasi elemento scaduto non viene rimosso immediatamente dalla cache.
Scadenza dei dati in NCache NCache Dettagli
Tipi di scadenza in NCache
NCache fornisce le seguenti strategie per soddisfare le esigenze dell'utente:
- Assoluto/Predefinito Scadenza assoluta
- Scadenza scorrevole/scorrevole predefinita
Analizzeremo da vicino entrambi questi tipi e i loro usi.
Scadenza assoluta
In questa strategia, viene specificato un tempo assoluto con l'elemento che deve essere invalidato. Il tempo specificato viene mantenuto il UTC formato dell'ora, quindi, l'ora specificata in qualsiasi fuso orario viene convertita nel formato dell'ora UTC sul server della cache. Il tempo può variare da secondi alle ore ai giorni ai mesi, e allo scadere del tempo, l'articolo è invalidato o scaduto. Guarda la Figura 1 per chiarezza:
Caso d'uso: Per i casi in cui è possibile stimare per quanto tempo un elemento deve essere conservato nella cache. Ad esempio, se un prodotto a tempo limitato viene lanciato e non può essere venduto dopo 24 ore, l'articolo viene aggiunto con una scadenza assoluta di 24 ore e successivamente il prodotto scade dalla cache.
Diamo un'occhiata all'esempio di codice che mostra l'aggiunta di un elemento nella cache che scade dopo 5 minuti.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: 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 with expiry var cacheItem = new CacheItem(product); var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); cacheItem.Expiration = expiration; cache.Insert(key, cacheItem); |
Scadenza scorrevole
Come spiega il nome, questa strategia mantiene i dati nella cache finché vengono utilizzati. Pertanto, i dati che non sono stati utilizzati per un periodo di tempo specifico vengono invalidati. Ogni volta che si accede a qualsiasi dato aggiunto con scadenza scorrevole, la durata della loro esistenza nella cache viene estesa. Ad esempio, se non si accede a un elemento con un intervallo di scorrimento di 30 secondi per 30 secondi, è scaduto. Allo stesso modo, se si accede entro 30 secondi, la durata dell'elemento viene superata di altri 30 secondi nella cache.
Caso d'uso: Supponiamo di avere un'applicazione che accetta le credenziali dell'utente per l'accesso. Si desidera fornire l'accesso all'utente fintanto che l'utente è attivo e utilizza l'applicazione. La scadenza scorrevole ti aiuta nei casi in cui la sessione può essere mantenuta tenendo traccia degli utenti attivi.
Nell'esempio riportato di seguito, al prodotto viene aggiunta una scadenza scorrevole di 5 minuti:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 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 with expiry var cacheItem = new CacheItem(product); var expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5)); cacheItem.Expiration = expiration; cache.Insert(key, cacheItem); |
Sfratto dentro NCache Scadenza assoluta Scadenza scorrevole
Strategie di scadenza predefinite
NCache ti consente anche di aggiungere la scadenza predefinita per aiutarti a risparmiare lo sforzo di configurarlo manualmente. Questi possono essere configurati solo utilizzando NCache Web Manager o file di configurazione (mostrati più avanti nel blog). Di seguito sono riportati i valori predefiniti:
- Assoluto predefinito
- Scorrimento predefinito
- Assoluto predefinito più lungo
- Predefinito Scorre più a lungo
I valori predefiniti per impostazione predefinita sono 5 secondi per tutte le strategie di scadenza. Per favore riferisci a Scadenza predefinita spiegato a fondo in NCache documentazione.
Configura scadenza utilizzando NCache Web Manager
È possibile abilitare la scadenza e impostare la durata utilizzando NCache Gestore web. Lascia che ti mostri come:
Configura la scadenza usando i file di configurazione
Puoi anche abilitare la scadenza in NCache utilizzando il file di configurazione (config.ncconf) che è installato in NCache directory di installazione per impostazione predefinita. Sotto il tag, c'è un tag come mostrato di seguito:
1 2 3 4 5 |
<expiration-policy enabled="True"> <absolute-expiration longer-enabled="False" longer-value="5" default-enabled="False" default-value="30"/> <sliding-expiration longer-enabled="False" longer-value="5" default-enabled="False" default-value="20"/> </expiration-policy> |
Allo stesso modo, puoi specificare l'intervallo di pulizia dopo il quale gli elementi scaduti vengono rimossi dalla cache come mostrato di seguito:
1 2 3 |
<cache-settings ... > <cleanup interval="15sec"/> </cache-settings> |
Rimozione in blocco di articoli scaduti
Tutti gli elementi scaduti nella cache vengono rimossi in blocco per evitare la riduzione delle prestazioni causata dalla rimozione di singoli elementi. Tuttavia, puoi configurare le dimensioni in blocco degli elementi da rimuovere e il ritardo tra due rimozioni in blocco consecutive di dati scaduti. NCache viene fornito con un Alachisoft.NCache.Service.exe.config file posizionato nella directory di installazione di NCache e ha i seguenti tag configurabili:
1 2 |
<add key="NCacheServer.ExpirationBulkRemoveSize" value="10"/> <add key="NCacheServer.ExpirationBulkRemoveDelay" value="0"/> |
Configurazione della scadenza dei dati Scadenza e sfratto
Fatti da sapere
- Se un elemento viene aggiunto nella cache senza scadenza (assoluta o scorrevole), rimane nella cache per sempre fino alla rimozione manuale.
- Dovrai riavviare il NCache servizio dopo aver configurato qualsiasi cosa utilizzando i file di configurazione affinché la modifica abbia effetto.
- In NCache, la scadenza funziona in modo diverso rispetto alle diverse topologie, tutto è spiegato a fondo in Scadenza in ambiente cluster.
Riassumendo!
Quindi, tutto ciò che abbiamo discusso finora riassume il fatto che i dati non aggiornati nella cache devono essere gestiti in modo efficiente e la scadenza è il modo per farlo. È una tecnica che fa scadere i dati dalla cache in base alla tecnica fornita dall'utente. NCache ti aiuta a gestire queste cose senza problemi.