Estratégia de remoção de Redis

Há uma função para definir o tempo de expiração no Redis, ou seja, é possível definir um tempo de expiração para o valor armazenado no banco de dados redis. Como um banco de dados de cache, isso é muito prático. Por exemplo, o token ou algumas informações de login em nosso projeto geral, especialmente o código de verificação do SMS, têm um prazo.De acordo com o método tradicional de processamento de banco de dados, geralmente é considerado vencido por si mesmo, o que sem dúvida afetará seriamente o desempenho do projeto

Ao definir a chave, você pode dar um tempo de expiração, que é o tempo de expiração.Você pode especificar o tempo em que a chave pode sobreviver até o tempo de expiração

 

Dados expirados: Redis é um banco de dados no nível da memória.Todos os dados são armazenados na memória.Os dados na memória podem ser obtidos pela instrução TTL.

XX: Dados sensíveis ao tempo -1: Dados permanentemente válidos-2: Dados expirados ou excluídos ou indefinidos

 

Estrutura de armazenamento de dados antigos

 

 

 

O objetivo da estratégia de exclusão de dados: Encontrar um equilíbrio entre o uso da memória e o uso da CPU.A perda de equilíbrio fará com que o desempenho geral do redis se degrade e até cause tempo de inatividade do servidor ou vazamento de memória

Estratégia de exclusão de dados: exclusão regular + exclusão periódica + exclusão lenta

  Exclusão temporizada: crie um cronômetro.Quando a chave tiver um tempo de expiração e o tempo de expiração chegar, a tarefa do cronômetro excluirá a chave imediatamente

       Vantagens: economize memória, exclua-a nesse momento e libere rapidamente ocupação desnecessária de memória

       Desvantagens: a pressão da CPU é muito grande, não importa quão alta seja a carga da CPU no momento, ela ocupará a CPU, o que afetará o tempo de resposta e a taxa de transferência de comando do servidor redis

       Resumo: espaço de troca para desempenho do processador

  Exclusão periódica: o Redis padroniza para extrair aleatoriamente algumas chaves com um tempo de expiração a cada 100 ms, verificar se ela expirou e excluí-la se expirar. Observe que isso é selecionado aleatoriamente. Por que é aleatório? Se o redis armazena centenas de milhares de chaves e percorre todas as chaves que definem o tempo de expiração a cada 100ms, isso trará muita carga para a CPU.

     expira [i] i significa biblioteca  

     Quando o Redis inicia a inicialização do servidor, leia o valor da configuração server.hz, o padrão é 10

     Execute server.hz ​​serverCron () -> databaseCron () -> activeExpireCycle () a cada segundo

     O activeExpireCycle () verifica cada um deles expirar [*] um por um e executa 250ms / server.hz ​​a cada vez 

     Para uma certa detecção de vencimento [*], selecione aleatoriamente as teclas W para detecção: se a chave expirar, exclua a chave; se o número de chaves excluídas em uma rodada> W * 25%, faça o ciclo do processo; se a chave for excluída em uma rodada O número de <= W * 25%, verifique os próximos expiram [*], 0-15 ciclos (se o valor padrão estiver definido como 16)

     Valor W = valor do atributo ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP

     O parâmetro curret_db é usado para registrar quais expiram [*] o activeExpireCycle () entra para executar

     Se o tempo de execução de activeExpireCycle () expirar, continue executando a partir de current_db na próxima vez

     

    Pesquise periodicamente os dados sensíveis ao tempo na biblioteca redis, adote uma estratégia de extração aleatória e use a proporção de dados expirados para controlar a frequência da exclusão

    Recurso 1: A configuração de ocupação do desempenho da CPU tem um valor de pico e a frequência de detecção pode ser personalizada.

    Recurso 2: a pressão da memória não é muito grande e os dados frios que ocupam memória por um longo tempo serão limpos continuamente

    Resumo: verifique periodicamente o espaço de armazenamento

 

  Exclusão preguiçosa: a exclusão periódica pode resultar na exclusão de muitas chaves expiradas quando o tempo expirar. Portanto, há exclusão preguiçosa. Se sua chave expirada não for excluída por exclusão regular, ela ainda permanecerá na memória, a menos que seu sistema verifique a chave, ela será excluída por redis. Isso é chamado de exclusão lenta. expireIfNeeded (), verifique se os dados expiraram, chame quando get for executado

      Vantagens: economize desempenho da CPU, exclua apenas quando achar que deve ser excluído

      Desvantagens: a pressão da memória é muito grande, há dados que ocupam memória por um longo tempo

      Resumo: Use o espaço de armazenamento em troca do desempenho do processador (verificações aleatórias, verificações principais)

 

 

 

 

 

Algoritmo de despejo

Detecção de entrada de novos dados: quando novos dados entram em redis, e se a memória for insuficiente?

O Redis usa memória para armazenar dados.Antes de executar cada comando, chama freeMemoryIfNeeded () para verificar se a memória é suficiente. Se a memória não atender aos requisitos mínimos de armazenamento para dados adicionados recentemente, os redis excluirão temporariamente alguns dados para limpar o espaço de armazenamento para as instruções atuais. A estratégia de limpeza de dados é chamada algoritmo de despejo.

Nota: O processo de remoção de dados não é 100% para liberar espaço de memória disponível suficiente; se não for bem-sucedido, será executado repetidamente. Depois de tentar todos os dados, se você não conseguir atender aos requisitos de limpeza de memória, uma mensagem de erro será exibida.

(Err) Comando OOM não permitido quando memória usada> 'maxmemory'

 

A memória máxima disponível maxmemory: a proporção de memória física ocupada, o valor padrão é 0, o que significa que não há limite. Geralmente definido acima de 50%

Cada vez que o número de dados a serem excluídos é selecionado: maxmemory-samples Os dados não serão verificados quando os dados forem selecionados, resultando em severa perda de desempenho e desempenho reduzido de leitura e gravação. Portanto, o método de aquisição aleatória de dados é usado como dados a serem detectados e excluídos

Estratégia de exclusão: após maxmemory-policy atingir a memória máxima, a estratégia para excluir os dados selecionados

 

Mecanismo de eliminação de memória Redis O Redis fornece 6 estratégias de eliminação de dados:

 

O posicionamento: maxmemory-policy volatile-lru

 

Detectar dados voláteis (conjunto de dados server.db [i] .expira que pode expirar)

volatile-lru-> Selecione os dados usados ​​menos recentemente no conjunto de dados com o tempo de expiração definido para ser eliminado

volatile-lfu-> Selecione os dados menos usados ​​do conjunto de dados com o tempo de expiração definido para ser eliminado

volatile-ttl-> Escolha os dados que estão prestes a expirar no conjunto de dados com o tempo de expiração definido

volatile-random-> seleciona arbitrariamente a eliminação de dados do conjunto de dados com o tempo de expiração definido

 

Verifique todos os dados do banco de dados (todos os conjuntos de dados server.db [i] .dict)

allkeys-lru-> Quando a memória não é suficiente para acomodar os dados recém-gravados, no espaço da chave, remova a chave usada menos recentemente (a mais comum)

allkeys-random-> Seleciona arbitrariamente a eliminação de dados do conjunto de dados

allkeys-lfu-> Quando a memória não for suficiente para acomodar os dados recém-gravados, remova as chaves menos usadas no espaço de chaves

 

Abandonar despejo de dados

no-eviction-> Proibir remoção de dados (a estratégia padrão do redis4.0), ou seja, quando a memória não é suficiente para acomodar os dados recém-gravados, a nova operação ou erro de gravação é relatada, causando OOM (falta de memória)

 

Você pode verificar o número de acertos do cache com o comando info

 

Acho que você gosta

Origin www.cnblogs.com/liushoudong/p/12679174.html
Recomendado
Clasificación