Como posso obter todas as chaves definidas nas minhas instâncias do memcached?
Eu tentei pesquisar no Google, mas não encontrei muito, exceto o PHP
suporte a um getAllKeys
método , o que significa que é realmente possível fazer isso de alguma forma. Como posso obter o mesmo em uma sessão de telnet?
Eu tentei todas as opções relacionadas à recuperação mencionadas nas folhas de dicas do memcached e no resumo do comando telc do Memcached , mas nenhuma delas funciona e não consigo encontrar a maneira correta de fazer isso.
Nota: No momento, estou fazendo isso no desenvolvimento, portanto, pode-se supor que não haverá problemas devido à definição de novas chaves ou a outras condições de corrida, e o número de chaves também será limitado.
Respostas:
Encontrei uma maneira, graças ao link aqui (com a discussão em grupo original do google aqui )
Primeiro,
Telnet
para o seu servidor:A seguir, liste os itens para obter os IDs da laje:
O primeiro número após 'itens' é o ID da laje. Solicite um despejo de cache para cada ID da laje, com um limite para o número máximo de chaves a serem despejadas:
fonte
b
é bytes,s
é tempo de segundos segundoslru_crawler metadump all
que despejar todas as chaves de cache, e não "apenas" os primeiros 1M. Github.com/memcached/memcached/blob/…memdump
Existe um
memcdump
memdump
comando (às vezes ) para isso (parte delibmemcached-tools
), por exemplo:que retornará todas as chaves.
memcached-tool
Na versão recente de
memcached
também hámemcached-tool
comando, por exemploque despeja todas as chaves e valores.
Veja também:
fonte
dump
sub-comando paramemcached-tool
parece limpar o cache :( --might ser mais seguro para usodisplay
oustats
pela primeira vez.libmemcached-tools
e o binário da ferramenta é chamado memcdump.memcached-tool
é um pouco escondido em um diretório, que não pode estar em um padrãoPATH
- pelo menos no Ubuntu hospitaleiro - aqui:/usr/share/memcached/scripts/
Baseie-se na resposta @mu here aqui. Eu escrevi um script de despejo de cache.
O script despeja todo o conteúdo de um servidor armazenado em cache. Ele foi testado com o Ubuntu 12.04 e um localhost memcached, então sua milhagem pode variar.
O que faz, ele percorre todas as lajes de cache e imprime 1000 entradas de cada uma.
Esteja ciente de certos limites deste script, ou seja, ele pode não ser dimensionado para um servidor de cache de 5 GB, por exemplo. Mas é útil para fins de depuração em uma máquina local.
fonte
memcached 1.4.21-1.1+deb8u1
eu tive que enviar explicitamente um comando quit para o memcached. Eu modifiquei seu comando para isso e funciona corretamente agora:echo -e "stats items\nquit" | nc localhost 11211 | grep -oe ':[0-9]*:' | grep -oe '[0-9]*' | sort | uniq | xargs -L1 -I{} bash -c 'echo -e "stats cachedump {} 1000\nquit" | nc localhost 11211'
Obrigado por compartilhar isso! Bastante útil para depuração :) #Se você possui o PHP e o PHP-memcached instalados, pode executar
fonte
$c->setOption(Memcached::OPT_BINARY_PROTOCOL, false);
Para versões mais recentes do MemcachedBash
Para obter a lista de chaves no Bash, siga estas etapas.
Primeiro, defina a seguinte função de invólucro para simplificar o uso (copiar e colar no shell):
Memcached 1.4.31 e superior
Você pode usar o
lru_crawler metadump all
comando para despejar (a maioria) dos metadados para (todos) os itens no cache.Exemplo de comando usando a função definida anteriormente:
Consulte: ReleaseNotes1431 .
Memcached 1.4.30 e abaixo
Obtenha uma lista de lajes usando o comando de estatísticas de itens , por exemplo:
Para cada classe de slub, é possível obter a lista de itens especificando o ID do slub junto com o número limite (
0
- ilimitado):Nota: Você precisa fazer isso para cada servidor armazenado em cache.
Para listar todas as chaves de todos os stubs, aqui está o one-liner (por servidor):
Nota: O comando acima pode causar sérios problemas de desempenho ao acessar os itens, portanto, não é aconselhável executar ao vivo.
Notas:
Fonte: GH-405 .
Palavras-chave:
protocol.txt
arquivo de documentos.fonte
A maneira mais fácil é usar o pacote python-memcached-stats, https://github.com/abstatic/python-memcached-stats
O método keys () deve ajudá-lo.
Exemplo -
fonte
python -m memcached_stats <ip> <port>