Gestione della memoria
Criteri di rimozione
Scegliere un criterio di rimozione che funziona per l'applicazione. Il criterio predefinito per cache di Azure per Redis è volatile-lru
, significa che solo le chiavi con un valore TTL impostato con un comando come EXPIRE sono idonee per la rimozione. Se non sono presenti chiavi con valore TTL, il sistema non rimuoverà alcuna chiave. Se si vuole che il sistema consenta l'eliminazione di qualsiasi chiave se in pressione di memoria, è possibile considerare il allkeys-lru
criterio.
Scadenza delle chiavi
Impostare un valore di scadenza sulle chiavi. Una scadenza rimuove le chiavi in modo proattivo anziché attendere fino a quando non è presente una pressione di memoria. Quando si esegue la rimozione a causa della pressione di memoria, può causare un carico maggiore nel server. Per altre informazioni, vedere la documentazione per i comandi EXPIRE e EXPIREAT.
Ridurre al minimo la frammentazione della memoria
I valori di grandi dimensioni possono lasciare la memoria frammentata sulla rimozione e potrebbero causare un utilizzo elevato della memoria e il carico del server.
Monitorare l'utilizzo della memoria
Aggiungere il monitoraggio sull'utilizzo della memoria per assicurarsi di non esaurire la memoria e di avere la possibilità di ridimensionare la cache prima di visualizzare i problemi.
Configurare l'impostazione maxmemory-riservata
Configurare l'impostazione massima riservata per migliorare la velocità di risposta del sistema:
Un'impostazione di prenotazione sufficiente è particolarmente importante per i carichi di lavoro di scrittura o se si archiviano valori di 100 KB o più nella cache. Per impostazione predefinita, quando si crea una cache, circa il 10% della memoria disponibile è riservato a
maxmemory-reserved
. Un altro 10% è riservato permaxfragmentationmemory-reserved
. È possibile aumentare la quantità riservata se si dispone di carichi pesanti di scrittura.L'impostazione
maxmemory-reserved
configura la quantità di memoria, in MB per istanza in un cluster, riservata alle operazioni non cache, ad esempio la replica durante il failover. L’impostazione di questo valore consente di avere un'esperienza più coerente del server Redis quando il carico varia. È necessario impostare un valore più elevato per carichi di lavoro che scrivono quantità elevate di dati. Quando la memoria è riservata per tali operazioni non è disponibile per l'archiviazione dei dati della cache. L'intervallo consentito permaxmemory-reserved
è il 10% - 60% dimaxmemory
. Se si tenta di impostare questi valori inferiori al 10% o superiore al 60%, vengono rivalutati e impostati sul 10% minimo e il 60% massimo. I valori vengono sottoposti a rendering in megabyte.L'impostazione
maxfragmentationmemory-reserved
configura la quantità di memoria, in MB per istanza in un cluster, riservata per la frammentazione della memoria. Quando si imposta questo valore, l'esperienza del server Redis è più coerente quando la cache è completa o vicina a piena e il rapporto di frammentazione è elevato. Quando la memoria è riservata per tali operazioni non è disponibile per l'archiviazione dei dati della cache. L'intervallo consentito permaxfragmentationmemory-reserved
è il 10% - 60% dimaxmemory
. Se si tenta di impostare questi valori inferiori al 10% o superiore al 60%, vengono rivalutati e impostati sul 10% minimo e il 60% massimo. I valori vengono sottoposti a rendering in megabyte.Una cosa da considerare quando si sceglie un nuovo valore di prenotazione di memoria (
maxmemory-reserved
omaxfragmentationmemory-reserved
) è come questa modifica potrebbe influire su una cache con grandi quantità di dati in esso già in esecuzione. Ad esempio, se si dispone di una cache da 53 GB con 49 GB di dati e quindi modificare il valore della prenotazione su 8 GB, la memoria massima disponibile per il sistema scenderà a 45 GB. Se i valori correnti oused_memory_rss
sonoused_memory
superiori al nuovo limite di 45 GB, il sistema deve rimuovere i dati fino a quandoused_memory
entrambi eused_memory_rss
sono inferiori a 45 GB. La rimozione può aumentare il carico del server e la frammentazione della memoria. Per altre informazioni sulle metriche della cache,used_memory
ad esempio eused_memory_rss
, vedere Creare metriche personalizzate.
Nota
Quando si ridimensiona una cache verso l'alto o il basso, entrambe maxmemory-reserved
le maxfragmentationmemory-reserved
impostazioni vengono ridimensionate automaticamente in proporzione alle dimensioni della cache. Se, ad esempio, maxmemory-reserved
è impostato su 3 GB in una cache da 6 GB e si passa alla cache da 12 GB, le impostazioni vengono automaticamente aggiornate a 6 GB durante il ridimensionamento. Quando si aumenta il numero di istanze, si verifica il contrario.
Quando si ridimensiona una cache verso l'alto o il basso a livello di codice, usando PowerShell, l'interfaccia della riga di comando o l'API Rest, qualsiasi maxmemory-reserved
o maxfragmentationmemory-reserved
viene ignorata come parte della richiesta di aggiornamento. Viene rispettata solo la modifica della scalabilità. È possibile aggiornare queste impostazioni di memoria dopo il completamento dell'operazione di ridimensionamento.