Gestão da memória

Política de expulsão

Escolha uma política de expulsão que funcione para a sua aplicação. A política predefinida para Cache do Azure para Redis é volatile-lru, o que significa que apenas as chaves que têm um valor TTL definido com um comando como EXPIRE são elegíveis para expulsão. Se nenhuma chave tiver um valor TTL, o sistema não expulsará quaisquer chaves. Se pretender que o sistema permita que qualquer chave seja expulsa se estiver sob pressão de memória, recomendamos que considere a allkeys-lru política.

Expiração das chaves

Defina um valor de expiração nas chaves. Uma expiração remove as chaves proativamente em vez de aguardar até que haja pressão sobre a memória. Quando a expulsão ocorre devido à pressão da memória, pode causar mais carga no servidor. Para obter mais informações, veja a documentação dos comandos EXPIRE e EXPIREAT .

Minimizar a fragmentação da memória

Os valores grandes podem deixar a memória fragmentada na expulsão e podem levar a uma elevada utilização da memória e à carga do servidor.

Monitorizar a utilização da memória

Adicione monitorização à utilização da memória para garantir que não fica sem memória e que tem a oportunidade de dimensionar a cache antes de ver problemas.

Configurar a definição maxmemory-reserved

Configure a definição maxmemory-reserved para melhorar a capacidade de resposta do sistema:

  • Uma definição de reserva suficiente é especialmente importante para cargas de trabalho de escrita intensiva ou se estiver a armazenar valores de 100 KB ou mais na cache. Por predefinição, quando cria uma cache, aproximadamente 10% da memória disponível está reservada para maxmemory-reserved. Outros 10% estão reservados para maxfragmentationmemory-reserved. Pode aumentar o montante reservado se tiver cargas pesadas de escrita.

  • A maxmemory-reserved definição configura a quantidade de memória, em MB por instância num cluster, reservada para operações que não sejam de cache, como a replicação durante a ativação pós-falha. Definir este valor permite-lhe ter uma experiência de servidor do Redis mais consistente quando a sua carga varia. Este valor tem de ser definido mais alto para cargas de trabalho que escrevem grandes quantidades de dados. Quando a memória é reservada para tais operações, não está disponível para armazenamento de dados em cache. O intervalo permitido para maxmemory-reserved é de 10% a 60% de maxmemory. Se tentar definir estes valores inferiores a 10% ou superiores a 60%, estes são reavaliados e definidos para o máximo de 10% e 60%. Os valores são compostos em megabytes.

  • A maxfragmentationmemory-reserved definição configura a quantidade de memória, em MB por instância num cluster, reservada para acomodar a fragmentação da memória. Quando define este valor, a experiência do servidor Redis é mais consistente quando a cache está cheia ou perto da totalidade e a proporção de fragmentação é elevada. Quando a memória é reservada para tais operações, não está disponível para armazenamento de dados em cache. O intervalo permitido para maxfragmentationmemory-reserved é de 10% a 60% de maxmemory. Se tentar definir estes valores inferiores a 10% ou superiores a 60%, estes são reavaliados e definidos para o máximo de 10% e 60%. Os valores são compostos em megabytes.

  • Uma coisa a considerar ao escolher um novo valor de reserva de memória (maxmemory-reserved ou maxfragmentationmemory-reserved) é como esta alteração pode afetar uma cache com grandes quantidades de dados que já estão em execução. Por exemplo, se tiver uma cache de 53 GB com 49 GB de dados e, em seguida, alterar o valor da reserva para 8 GB, a memória máxima disponível para o sistema diminuirá para 45 GB. Se os valores atuais used_memory ou os valores used_memory_rss forem superiores ao novo limite de 45 GB, o sistema tem de expulsar os dados até used_memory ambos e used_memory_rss ficarem abaixo dos 45 GB. A expulsão pode aumentar a carga do servidor e a fragmentação da memória. Para obter mais informações sobre métricas de cache, como used_memory e used_memory_rss, veja Criar as suas próprias métricas.

Nota

Quando aumenta ou reduz verticalmente uma cache, tanto as definições como maxmemory-reservedmaxfragmentationmemory-reserved as são dimensionadas automaticamente em proporção ao tamanho da cache. Por exemplo, se maxmemory-reserved estiver definido como 3 GB numa cache de 6 GB e dimensionar para cache de 12 GB, as definições serão atualizadas automaticamente para 6 GB durante o dimensionamento. Quando reduz verticalmente, ocorre o inverso. Quando dimensiona uma cache para cima ou para baixo programaticamente, com o PowerShell, a CLI ou a API Rest, qualquer maxmemory-reserved ou maxfragmentationmemory-reserved é ignorado como parte do pedido de atualização. Apenas a sua alteração de dimensionamento é honrada. Pode atualizar estas definições de memória após a conclusão da operação de dimensionamento.

Passos seguintes