O que faz com que o memcache exclua as chaves?

2

Nossa instalação do memcache recentemente começou a remover chaves, e não temos certeza do motivo. Grandes grupos de chaves desaparecem ao mesmo tempo.

O Memcache informa que os despejos são baixos ou inexistentes, e nosso aplicativo não tem como limpar o memcache (ele só pode excluir chaves específicas). Até mesmo as chaves das quais o aplicativo não tem conhecimento são excluídas, por isso, estamos bastante convencidos de que elas estão expirando. No entanto, nossa configuração de memcache não foi tocada em algum momento.

Alguém depurou um problema como esse antes e, em caso afirmativo, há alguma etapa que você recomendaria? Quão flexível é a política de expiração do memcache - é possível que, de repente, estejamos correndo em um critério baseado (digamos) em escrever frequência para uma chave?

    
por Arkaaito 25.05.2010 / 08:40

2 respostas

4

Isso se deve ao fato de um código de depuração ter sido deixado no aplicativo quando foi implantado.

O código de depuração chamado manualmente Memcache :: flush.

Eu acho que a moral desta história é: "Toda vez que você diz, 'não pode ser a aplicação', você provavelmente está errado." Você pensaria que eu teria sabido disso no momento em que fizesse essa pergunta, mas aparentemente, eu poderia fazer um lembrete de tempos em tempos.

    
por 13.10.2010 / 11:08
5

Mesmo que você tenha configurado as chaves para não expirar no Memcached, os registros serão excluídos de acordo com o menos usado recentemente, se o Memcached for preenchido. O mecanismo de armazenamento padrão baseado em slab armazena registros em blocos de tamanho fixo que são alocados a partir de blocos de tamanho de 1 MB. Embora isso seja rápido, isso também significa que o Memcached pode acabar perdendo bastante memória. Uma vez que uma placa foi alocada para conter pedaços de um tamanho específico, não acho que os pedaços possam ser redimensionados. Se uma mistura de objetos grandes e pequenos for armazenada em cache e a composição for alterada ao longo do tempo, é possível que o memcached acabe armazenando pequenos objetos em blocos muito maiores, se esses forem os únicos disponíveis.

Este é um dos problemas que as empresas gostam, por ex. gear6 (www.gear6.com) e northscale (www.northscale.com) abordaram em suas distribuições do Memcached.

    
por 12.07.2010 / 18:42