memcache Redis políticas de expiração mysql e eliminação de memória contraste mecanismo

memcache e Redis tão quente hoje em dia cache, é claro, é altamente deve ser utilizado projetos simultâneos, eo processo de utilização de estouro de memória é inevitável, recentemente li um monte de informações para classificar o artigo, ao mesmo tempo, ser um resumo detalhado e comparação de mysql.

Quando a memória não está cheio

  • memcache
    1.4.25 e versões anteriores inertes exclusão mecanismo, não limpar automaticamente, página Uma vez atribuído antes da reinicialização não serão reciclados ou re-atribuído até a visita encontrada artigo expirou não são excluídos.
    Após o tempo especificado versão intervalo será para descobrir se existem item de atraso, se haverá processo de exclusão expirado.

  • Redis
    chamar regularmente databasesCron () gatilhos função clean-up , freqüência hz é determinada pelos parâmetros no arquivo de configuração, representa um segundo, o número de tarefas em segundo plano é chamado, ele geralmente é realizada uma vez 100ms, ao definir um valor limite, tal como 25% quando os dados extraídos 100 ao longo de 25 expira, continuam a tomá-lo após a limpeza, a menos de 25 se os 100ms sono.

    Para evitar redis de ocupação, com uma duração máxima para cada tarefa realizada fora de lá um limite, garantindo assim que todas as iniciativas para eliminar a aplicação bloqueio excessivo não solicitar, tem que dizer que esta é uma boa solução.

estouro de memória

  • memcache
    quando a memória cache de memória total atingiu as configurações de memória máximas, a laje pode ser usado para representar toda a página ter sido fixada, em seguida, se houver dados em, vai levar a memcache usar estratégia LRU dados abate. Aqui a política LRU não é dirigida contra todas as placas, mas apenas para novos dados devem ser colocados na laje, e não em nome da ocorrência da sobrecarga de LRU memcache.
    Quando você tamanho do bloco definindo tempo razoável, como slab20 tamanho do bloco é muito grande, começou a pegar um monte de memória, mas, em seguida, se deve ou não expirou, não é para ser usado novamente quando se está em memória, de modo que quando um relativamente pequeno slab1 o bloco está cheio, nenhuma nova laje e segmentação de memória e mesmas especificações slab1 como o pedaço de tempo, memcache começará LRU, para limpar os dados sob a laje. Esta situação irá resultar na memória de um grande desperdício ea taxa de acerto caiu , veja meu outro blog "taxa princípio de armazenamento de cache de memória e de sucesso" .
    princípio LRU é baseado no tempo de acesso a chave em uma lista ligada, constantemente atualizado, de modo que a cauda é o mais longo tempo sem uso.

  • Redis
    (1) o LRU-volátil: o tempo de expiração do conjunto a fase de selecção conjunto de dados para os dados menos recentemente usado.

    (2) volátil-TTL: a partir de um determinado tempo de validade da selecção do conjunto de dados para expirar dados eliminados.

    (3) volátil-aleatória: o tempo de expiração foi definido arbitrariamente dados seleccionados para fora do conjunto de dados.

    (4) volátil-LFU: escolha de um tempo definido de expiração do conjunto de dados para usar o menor frequência de dados eliminada.

    (5) AllKeys-LRU: dados do conjunto de dados seleccionado para fora do utilizado menos recentemente

    (6) AllKeys-LFU: escolher a partir do conjunto de dados para utilizar os dados de frequência mais baixas eliminados.

    (7) AllKeys-aleatória: seleccionar dados a partir do conjunto de dados (server.db [i] .dict) qualquer

    (8) no-enviction (expulsão): proíbe os dados de expulsão, que é a política padrão. Quando os meios de memória é insuficiente para acomodar os novos dados, será dada a nova operação de gravação, o pedido pode prosseguir tarefa linha não pode ser continuada, usando a política de não-enviction pode garantir que os dados não são perdidos.

Note-se que este processo de limpeza é bloqueado até que o espaço de memória suficiente apagada. Portanto, se no caso do chamador alcançado MaxMemory e está constantemente escrevendo, pode repetidamente acionar a iniciativa de limpar a estratégia, levando ao pedido haverá alguns atrasos.

  • mysql
    perguntou mysql tem uma memória fora dele? Claro, o resultado pode ser armazenado em cache consulta mysql, mas isso é de mau gosto, porque uma vez que as adições e exclusões para uma linha em toda a cache miss mesa, o cache é comparado com os resultados intermediários de servidor SQL sem parâmetros, o que corresponde a mysql armazenados instrução de procedimento, mas eles têm em comum é aparências cronologicamente anteriores eliminados .
    mysql hardware muito rápido é a sua área de buffer mecanismo de eliminação, é gerada durante as tabelas temporárias de consulta e outros dados, e por causa memcache e não Redis o mesmo, os dados mysql é a página de leitura por página, e não todo o uso de , de modo que o mecanismo de recolha de lixo de referência GC Java, os dados armazenados em cache para a nova geração e a velha geração, a utilização de dados na cabeça da antiga geração, até um determinado período de tempo para colocar na nova geração, que impede eficazmente a leitura simultânea de grandes quantidades de dados para o original dados térmicos de limpeza para fora da situação.
Lançado cinco artigos originais · ganhou elogios 0 · Visualizações 76

Acho que você gosta

Origin blog.csdn.net/jy615183000/article/details/105334830
Recomendado
Clasificación