Memcached é simplesmente um armazenamento chave/valor, muitas vezes usado como um cache para reduzir a carga em um sistema de banco de dados. Ele usa um conceito de slabs e chunks para armazenar dados. Cada parte dos dados que você deseja armazenar, dependendo do tamanho do objeto, ficará armazenada em uma slab diferente. A slab é fixa em tamanho e irá armazenar seus dados.
Memcached permite recuperar todos os dados a partir da linha de comando (= interface telnet).
Agora, assumindo que o seu telnet está sendo executado em ‘localhost’ na porta padrão 11211, você pode acessar a interface telnet na linha de comando desse modo.
$ telnet localhost 11211
Agora você entrou na interface CLI Memcached. Para começar, execute um comando stats para mostrar a você quantos slabs ativos existem.
$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats slabs STAT 1:chunk_size 96 STAT 1:chunks_per_page 10922 ... STAT 28:cas_hits 0 STAT 28:cas_badval 0 STAT active_slabs 22
Cada slab irá mostrar-lhe as estatísticas de uso (ótimo para monitoramento de cada slab, por sinal!), bem como a identificação numérica para cada um desses slabs. Essas IDs são necessárias para obter todos os dados a partir de um slab.
Por exemplo, para obter todos os dados do primeiro slab, use o seguinte comando CLI. Note que o primeiro dígito é a ID numérica do slab, e o segundo dígito é o número de itens que você deseja recuperar. Zero (= 0) significa todos os itens.
$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats cachedump 1 0 ITEM cache-.wildcard-locale%3A [2 b; 1367247294 s]
Nesse caso, na slab de ID 1, há um item encontrado chamado “cache-.wildcard-locale” (esse é um cache Drupal), com o valor próximo a ele.
Alguns slabs terão mais itens do que outros.
$ telnet localhost 11211 ... stats cachedump 5 0 ITEM cache_field-field%3Auser%3A1 [144 b; 1367247294 s] ITEM cache_path-admin%2Fstructure [140 b; 1367247294 s] ITEM cache_path-admin%2Fappearance [141 b; 1367247294 s] ITEM cache_field-field%3Anode%3A9 [145 b; 1367247294 s] ITEM cache_field-field%3Anode%3A4 [145 b; 1367247294 s] ITEM cache_path-node%2F35%2Fedit [131 b; 1367247294 s] ITEM cache_path-node%2F32%2Fedit [131 b; 1367247294 s] ITEM cache_path-node%2F30%2Fedit [131 b; 1367247294 s]
Percorra cada item e faça um “stats cachedump $ID 0”, e você verá todos os dados.
Agora, se você não quer um telnet de cada vez, você pode enganar um pouco com esse simples linha.
$ echo "stats cachedump 5 0" | nc localhost 11211 ITEM cache_field-field%3Auser%3A1 [144 b; 1367247294 s] ITEM cache_path-admin%2Fstructure [140 b; 1367247294 s] ITEM cache_path-admin%2Fappearance [141 b; 1367247294 s] ITEM cache_field-field%3Anode%3A9 [145 b; 1367247294 s] ITEM cache_field-field%3Anode%3A4 [145 b; 1367247294 s] ITEM cache_path-node%2F35%2Fedit [131 b; 1367247294 s] ITEM cache_path-node%2F32%2Fedit [131 b; 1367247294 s] ITEM cache_path-node%2F30%2Fedit [131 b; 1367247294 s]
Ela exige apenas o seu canivete suíço para networking: NetCat (= nc).
***
Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://mattiasgeniar.be/2013/05/29/reading-all-data-from-a-memcached-instance/