obtener todas las claves establecidas en memcached


¿Cómo puedo configurar todas las claves en mi(s) instancia (es) de memcached?

Traté de buscar en Google, pero no encontré mucho, excepto que PHP soporta un getAllKeys método , lo que significa que es realmente posible hacer esto de alguna manera. ¿Cómo puedo obtener lo mismo dentro de una sesión de telnet?

He probado todas las opciones relacionadas con la recuperación mencionadas en memcached cheat sheet y Memcached telnet command summary, pero ninguna de ellas funciona y no puedo encontrar la manera correcta para hacer esto.

Nota: Actualmente estoy haciendo esto en desarrollo, por lo que se puede suponer que no habrá problemas debido a que se establezcan nuevas claves u otras condiciones de carrera, y el número de claves también será limitado.

Author: mu 無, 2013-10-24

6 answers

Encontrado una manera, gracias a la enlace aquí (con el original discusión del grupo de google aquí)

Primero, Telnet a su servidor:

telnet 127.0.0.1 11211

A continuación, enumere los elementos para obtener los id de la losa:

stats items
STAT items:3:number 1
STAT items:3:age 498
STAT items:22:number 1
STAT items:22:age 498
END

El primer número después de 'items' es el id de la losa. Solicite un volcado de caché para cada id de slab, con un límite para el número máximo de claves a volcar:

stats cachedump 3 100
ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s]
END

stats cachedump 22 100
ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s]
END

 139
Author: mu 無,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 17:06:28

memdump

Hay un comando memdump para eso (memcdump en Ubuntu, parte de libmemcached-tools), por ejemplo:

memdump --servers=localhost

Que devolverá todas las claves.


memcached-tool

En la versión reciente de memcached también haymemcached-tool comando, por ejemplo

memcached-tool localhost:11211 dump | less

Que vuelca todas las claves y valores.

 42
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-06 13:06:24

Base en @mu answer responda aquí. He escrito un script de volcado de caché.

El script vuelca todo el contenido de un servidor memcached. Está probado con Ubuntu 12.04 y un localhost memcached, por lo que su kilometraje puede variar.

#!/usr/bin/env bash

echo 'stats items'  \
| nc localhost 11211  \
| grep -oe ':[0-9]*:'  \
| grep -oe '[0-9]*'  \
| sort  \
| uniq  \
| xargs -L1 -I{} bash -c 'echo "stats cachedump {} 1000" | nc localhost 11211'

Lo que hace, pasa por todas las losas de caché e imprime 1000 entradas de cada una.

Tenga en cuenta ciertos límites de este script, es decir, puede no escalar para un servidor de caché de 5 GB, por ejemplo. Pero es útil para fines de depuración en un local equipo.

 13
Author: Omar Al-Ithawi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:02

La forma más fácil es usar el paquete python-memcached-stats, https://github.com/abstatic/python-memcached-stats

El método keys() debería ponerte en marcha.

Ejemplo -

from memcached_stats import MemcachedStats
mem = MemcachedStats()

mem.keys()
['key-1',
 'key-2',
 'key-3',
 ... ]
 4
Author: abhishek_M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 07:16:51

Si tiene instalado PHP & PHP-memcached, puede ejecutar

$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
 4
Author: RousseauAlexandre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-11 13:10:26

Bash

Para obtener la lista de claves en Bash, siga estos pasos.

Primero, defina la siguiente función de envoltura para que sea fácil de usar (copiar y pegar en el shell):

function memcmd() {
  exec {memcache}<>/dev/tcp/localhost/11211
  printf "%s\n%s\n" "$*" quit >&${memcache}
  cat <&${memcache}
}

Memcached 1.4.31 y superior

Puede usar el comando lru_crawler metadump all para volcar (la mayoría de) los metadatos para (todos) los elementos en la caché.

A diferencia de cachedump, no causa problemas graves de rendimiento y no tiene límites en la cantidad de claves que pueden ser volcar.

Ejemplo de comando usando la función previamente definida:

memcmd lru_crawler metadump all

Véase: ReleaseNotes1431.


Memcached 1.4.30 e inferior

Obtenga la lista de losas usando el comando items statistics , por ejemplo:

memcmd stats items

Para cada clase slub, puede obtener la lista de elementos especificando slub id junto con el número límite (0 - unlimited):

memcmd stats cachedump 1 0
memcmd stats cachedump 2 0
memcmd stats cachedump 3 0
memcmd stats cachedump 4 0
...

Nota: Debe hacer esto para cada memcached servidor.

Para listar todas las claves de todos los stubs, aquí está el one-liner (por un servidor):

for id in $(memcmd stats items | grep -o ":[0-9]\+:" | tr -d : | sort -nu); do
    memcmd stats cachedump $id 0
done

Nota: El comando anterior podría causar graves problemas de rendimiento al acceder a los elementos, por lo que no se recomienda ejecutar en vivo.


Notas:

stats cachedump solo vuelca el HOT_LRU (IIRC?), que es administrado por un hilo en segundo plano a medida que ocurre la actividad. Esto significa que bajo una versión lo suficientemente nueva que el 2Q algo habilitado, obtendrá instantánea vistas de lo que hay en solo uno de los LRU.

Si desea ver todo, lru_crawler metadump 1 (o lru_crawler metadump all) es el nuevo método soportado principalmente oficialmente que volcará asíncronamente tantas claves como desee. usted los conseguirá fuera de orden pero golpea todos los LRU, y a menos que usted está borrando/substituyendo los artículos varias funcionadas deben producir los mismos resultados.

Fuente: GH-405 .


Relacionado:

 1
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-06 13:49:29