L'adagio "640 KB dovrebbero essere sufficienti per chiunque" era ampiamente accettato. C'è qualche disaccordo su chi l'ha detto, ma ora c'è un accordo universale sul fatto che nessuno potrà mai sapere cosa significhi "abbastanza" in informatica.
Per questo motivo, è necessario eliminare o eliminare alcuni dati memorizzati nella cache quando si impostano le cache con una stima della quantità di dati che possono contenere. Senza espulsione, se la cache si riempie, non vengono accettate richieste in arrivo per l'aggiunta di dati perché nessun dato viene rimosso dalla cache.
Figure 1 lo spiega in una semplice illustrazione:
Avere lo sfratto abilitato significa che la tua cache rimuoverà i dati in base all'utilizzo o alla priorità rispetto ad altri elementi della cache. Ciò libera spazio per i dati in entrata che possono essere aggiunti alla cache una volta che gli elementi con priorità più vecchia/minore vengono rimossi dalla cache. Figure 2 lo illustra per chiarezza.
Discuteremo come NCache supporta e gestisce diversi criteri di eliminazione e come può essere abilitato nella cache.
NCache Dettagli Configura sfratto – NCache Docs NCache Documenti API client
Politiche di sfratto in NCache
NCache fornisce vari tipi di sfratto per adattarsi a qualsiasi caso d'uso.
Usato meno di recente (LRU)
Una delle politiche di sfratto più comunemente utilizzate è LRU. Questo criterio di rimozione consente alle cache di rimuovere gli elementi della cache più vecchi che non sono stati utilizzati per molto tempo rispetto agli elementi a cui è stato effettuato l'accesso di recente. I dati vengono rimossi in base all'ora dell'ultimo accesso. Il tempo di accesso viene aggiornato come timestamp per ogni elemento della cache quando viene recuperato o aggiornato nella cache.
Supponiamo che la tua cache contenga dati per i prodotti che vengono visualizzati dai clienti. Una volta che la cache è quasi piena, ha senso sfrattare i prodotti che non sono stati visualizzati per un po' di tempo.
Utilizzo meno frequente (LFU)
Questa politica di sfratto rimuove gli elementi della cache utilizzati meno di frequente. In LFU i dati vengono rimossi in base alla frequenza del suo utilizzo/numero di accessi all'elemento. Ad esempio, se si accede a un elemento 5 volte, è un candidato più idoneo per lo sfratto rispetto a un elemento a cui si accede 20 volte. Ciò è utile per gli scenari in cui un articolo di vendita calda viene visualizzato dai clienti ed è necessario rimuovere la cache. Lo sfratto di un articolo a cui non è stato effettuato l'accesso tanto quanto l'articolo più venduto non influirà sulla tua esperienza utente.
Sfratto basato sulla priorità
Sfratto prioritario rimuove prima i dati meno importanti dalla cache. Se puoi dare la priorità ai dati della cache, questa politica di eliminazione deve essere adottata per un maggiore controllo sulla modalità di sfratto dei dati. La priorità viene specificata durante l'aggiunta dell'elemento cache alla cache. È possibile specificare qualsiasi priorità dai seguenti livelli di priorità:
- Basso
- Sotto Normale
- Normale
- Sopra Normale
- Alta
- Non rimovibile: questo livello di priorità specifica che l'elemento della cache non deve essere rimosso e può essere configurato solo utilizzando NCache API.
Ecco come puoi facilmente specificare la priorità di ogni elemento mentre lo aggiungi alla cache:
1 2 3 4 5 6 7 8 9 |
Product product = FetchProductFromDB(1001); string key = $"Product:{product.ProductID}"; CacheItem cacheItem = new CacheItem(product) { Priority = CacheItemPriority.High }; cache.Add(key, cacheItem); |
NCache Dettagli Configura sfratto – NCache Docs NCache Documenti API client
Rimozione in blocco di oggetti di sfratto
Durante lo sfratto, gli articoli vengono rimossi in blocco in modo che le prestazioni non siano influenzate dallo sfratto degli articoli singolarmente. NCache ti offre la facilità di personalizzare le dimensioni in blocco e il ritardo tra due sfratti in blocco consecutivi in base alle tue esigenze.
Nel Alachisoft.NCache.Service.exe.config file nella %NCHOME%/bin/servizio, puoi configurare queste impostazioni tramite i seguenti tag. Per maggiori dettagli, fare riferimento alla documentazione su Configurazione delle impostazioni di sfratto.
Dimensioni sfuse per lo sfratto
È possibile specificare il numero di elementi da rimuovere in una chiamata in blocco.
1 |
<add key="NCacheServer.EvictionBulkRemoveSize" value="1000"/> |
Ritardo di rimozione in blocco dello sfratto
Puoi specificare il ritardo (in secondi) tra le chiamate di rimozione dello sfratto come mostrato qui. Un valore pari a zero non significherebbe alcun ritardo nello sfratto e gli articoli continueranno a essere sfrattati.
1 |
<add key="NCacheServer.EvictionBulkRemoveDelay" value="5"/> |
Abilita sfratto tramite Web Manager
Puoi abilitare lo sfratto attraverso una serie di pochi semplici passaggi. Dopo aver abilitato lo sfratto, puoi personalizzare il rapporto di sfratto (la percentuale della dimensione totale della cache da rimuovere) e specificare il criterio e la priorità.
Abilita sfratto tramite file di configurazione
Puoi anche configurare l'eliminazione tramite modifiche nel file di configurazione della cache (config.ncconf). Sotto il <cache-settings>
tag, aggiungi quanto segue <eviction-policy>
etichetta:
1 2 3 |
<cache-settings ...> <eviction-policy enabled="True" default-priority="normal" policy="priority" eviction-ratio="5%"/> </cache-settings> |
NCache Dettagli Configura sfratto – NCache Docs Confronto edizione
Sfratto in ambiente cluster
- Una volta abilitato lo sfratto, lo sfratto viene gestito in modo intelligente da NCache in ogni topologia di cache:
- Cache partizionata/partizione di replica: In Partitioned ed Partizione di replica topologie, poiché ogni nodo ha una partizione di dati, quindi ogni nodo è responsabile dello sfratto dei propri dati. Per il nodo di replica nella partizione di replica, i dati vengono rimossi automaticamente quando vengono rimossi dal nodo attivo.
- Cache replicata: In replicato topologia, ogni nodo ha lo stesso set di dati, quindi solo il coordinatore del cluster è responsabile dell'eliminazione.
- Specchio cache: In Specchio cache, il nodo attivo è responsabile dell'esecuzione dello sfratto sull'intera cache.
Conclusione
Affinché le operazioni della cache vengano applicate alla cache senza alcuna interruzione, è necessario assicurarsi che la cache mantenga i dati aggiornati ed elimini i dati indesiderati. È qui che entra in gioco lo sfratto. La configurazione dello sfratto è semplice e il resto è gestito da NCache stessa.