Voir le contenu de memcached

36

Existe-t-il des outils pour explorer ce qui est actuellement mis en cache dans un pool memcached? Pas beaucoup de graphiques, mais la clé / les valeurs actuellement stockées.

À M
la source

Réponses:

9

Essayez stats items- c.-à-d.

echo "stats items" | nc 127.0.0.1 11211
Danlefree
la source
16
Comment cela répond-il à la question?! Cela ne donne que les statistiques du serveur, mais ne récupère aucune clé.
Jagtesh Chadha
24

La bonne réponse serait echo "stats cachedump SLABS_ID LIMIT" | nc HOSTNAME PORT

par exemple. echo "stats cachedump 15 4" | nc 127.0.0.1 11211

Cela donnerait la sortie sur les lignes de:

ITEM cache_path-comments%2Fpage%2F2 [2211 b; 1337195558 s]
ITEM cache_path-comments%2Fpage%2F5 [2205 b; 1337195558 s]
ITEM cache_path-comments%2Fpage%2F6 [2179 b; 1337195558 s]
ITEM cache_path-comments [2164 b; 1337195558 s]
END

Remarque: Il s'agit d'une commande non documentée qui n'est pas prise en charge par l'équipe memcached et peut être supprimée dans n'importe quelle version. Pour la référence complète, consultez la commande Understanding Memcached stats cachedump .

Jagtesh Chadha
la source
cachedump est limité à une quantité non documentée de données, pas supérieure à 1-2 Mo, donc ce n'est pas fiable
John
11

memcached-tool

Dans la version récente de memcachedil y a aussi un memcached-toolscript perl, par exemple utilisation:

memcached-tool localhost:11211 dump | less

qui décharge toutes les clés et les valeurs.

memdump

Pour vider une liste de clés d’un serveur, utilisez memcdump/ memdumptool, par exemple

memcdump --servers=localhost 

Pour vider tous les objets:

memcdump --servers=localhost | xargs -L1 -I% sh -c 'echo "get %" | nc localhost 11211'

Pour vider toutes les valeurs de clé dans des fichiers séparés:

while read -r key; do [ -f "$key" ] || echo "get $key" | nc localhost 11211 > "$key.dump"; done < <(memcdump --server localhost)

memccat

Pour imprimer une valeur de clé, vous pouvez utiliser la memccatcommande, par exemple

memccat CACHE-KEY

Frapper

Pour vider toutes les clés dans le shell Bash, essayez:

exec {memcache}<>/dev/tcp/localhost/11211; printf "stats items\nquit\n" >&${memcache}; cat <&${memcache}

netcat

Voici un exemple pour obtenir la valeur d'un élément unique en utilisant netcat:

echo "get 13456_-cache-some_object" | nc 127.0.0.1 11211

Python

Voir: Comment exporter toutes les clés et valeurs de memcached avec Python?

Kenorb
la source
2
Cette réponse m'a aidé à trouver l' outil memcached actuel : memcdump . Voir cette réponse: stackoverflow.com/a/14491419/720360
mmuller
1
Je devais d'abord apt install libmemcached-tools, mais ensuite ce n'était toujours pas sur mon chemin, donc /usr/share/memcached/scripts/memcached-tool localhost:11211 dump. Ubuntu 18.
Camille Goudeseune
7

Essayez d'utiliser la telnetcommande, par exemple:

$ telnet 0 11211
stats
stats items
set key 1 23 8
get key
Silviud
la source
6

Installez libmemcached-toolset ensuite vous pouvez utiliser cette commande pour obtenir toutes les clés:

memcdump --server=127.0.0.1

Pour voir le contenu, vous pouvez demander une clé spécifique:

memccat --server=127.0.0.1 SOME_KEY

ou vous pouvez parcourir la liste des clés dans Bash:

for key in $(memcdump --server=127.0.0.1); do echo ------ $key ------; memccat --server=127.0.0.1 $key; done

Assurez-vous d'utiliser 127.0.0.1 (si vous exécutez la commande sur le même hôte) car localhostne semble pas fonctionner.

Tobia
la source
2

En mémoire de base, je ne pense pas qu’il soit possible d’interroger les clés stockées sur le serveur. La seule chose que vous puissiez obtenir, ce sont les statistiques relatives au stockage et aux éléments stockés.

Certains fournisseurs qui ont développé des solutions compatibles avec memcached, par exemple Gear6 , ont toutefois ajouté une fonctionnalité permettant l'interrogation.

Chris
la source