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 per maxfragmentationmemory-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 per maxmemory-reserved è il 10% - 60% di maxmemory. 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 per maxfragmentationmemory-reserved è il 10% - 60% di maxmemory. 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 o maxfragmentationmemory-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 o used_memory_rss sono used_memory superiori al nuovo limite di 45 GB, il sistema deve rimuovere i dati fino a quando used_memory entrambi e used_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 e used_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.

Passaggi successivi