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.
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
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.
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.
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',
... ]
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() );'
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 elHOT_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
(olru_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:
- Listar todos los objetos en memcached
- Escribiendo un cliente Redis en pure bash (es Redis, pero un enfoque muy similar)
- Compruebe otros comandos disponibles en https://memcached.org/wiki
- Echa un vistazo a la
protocol.txt
archivo docs.
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