web-dev-qa-db-fra.com

obtenir toutes les clés définies dans memcached

Comment obtenir toutes les clés définies dans ma ou mes instances memcached?

J'ai essayé de googler, mais je n'ai pas trouvé grand chose à part que PHP supporte la méthode getAllKeys , ce qui signifie qu'il est en fait possible de le faire. Comment puis-je obtenir la même chose dans une session telnet?

J'ai essayé toutes les options de récupération mentionnées dans aide-mémoire memcached et résumé de la commande telnet Memcached , mais aucune d'entre elles ne fonctionne et je ne parviens pas à trouver le bon chemin. pour faire ça.

Remarque: je suis actuellement en train de développer cela, donc on peut supposer qu'il n'y aura aucun problème en raison de la définition de nouvelles clés ou de la survenue de telles conditions de concurrence, et le nombre de clés sera également limité.

116
mu 無

Trouver un moyen, grâce au lien ici (avec l'original discussion de groupe google ici )

Tout d'abord, Telnet sur votre serveur:

telnet 127.0.0.1 11211

Ensuite, listez les éléments pour obtenir les identifiants de dalle:

 éléments de statistiques 
 Éléments STAT: 3: numéro 1 
 Éléments STAT: 3: 498 ans. : 22: 498 
 FIN 

Le premier numéro après ‘items’ est l’identifiant de la dalle. Demandez un vidage de cache pour chaque identifiant de dalle, avec une limite pour le nombre maximal de clés à vider:

 stats cachedump 3 100 
 ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s] 
 END 
 
 Stats en cache 22 100 
 ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s] 
 FIN 
 
159
mu 無

memdump

Il existe une commande memcdump (parfois memdump) pour cela (partie de _libmemcached-tools_), par exemple:

_memcdump --servers=localhost
_

qui retournera toutes les clés.


_memcached-tool_

Dans la version récente de memcached, il existe également une commande memcached-tool, par exemple.

_memcached-tool localhost:11211 dump | less
_

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

Voir également:

52
kenorb

Base sur @ mu 無 répondez ici. J'ai écrit un script de vidage de cache.

Le script vide tout le contenu d'un serveur memcached. Il a été testé avec Ubuntu 12.04 et un membre localhost, de sorte que votre kilométrage peut varier.

#!/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'

Ce qu'il fait, il passe par toutes les dalles de cache et imprime 1000 entrées de chaque.

Veuillez tenir compte de certaines limites de ce script, par exemple, il peut ne pas s’adapter pour un serveur de cache de 5 Go par exemple. Mais c'est utile pour le débogage sur une machine locale.

15
Omar Al-Ithawi

Si vous avez installé PHP et PHP-memcached, vous pouvez exécuter

$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
10
RousseauAlexandre

Bash

Pour obtenir la liste des clés dans Bash, suivez ces étapes.

Tout d’abord, définissez la fonction d’emballage suivante pour la rendre simple à utiliser (copier-coller dans Shell):

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

Memcached 1.4.31 et ci-dessus

Vous pouvez utiliser la commande _lru_crawler metadump all_ pour vider (la plupart des) métadonnées de (tous) les éléments du cache.

Contrairement à cachedump, il ne provoque pas de problèmes de performances graves et ne limite pas le nombre de clés pouvant être vidées.

Exemple de commande en utilisant la fonction définie précédemment:

_memcmd lru_crawler metadump all
_

Voir: ReleaseNotes1431 .


Memcached 1.4.30 et ci-dessous

Obtenir la liste des dalles en utilisant la commande statistiques des articles , par exemple:

_memcmd stats items
_

Pour chaque classe de slub, vous pouvez obtenir une liste d'éléments en spécifiant l'ID de slub avec un nombre limite (_0_ - illimité):

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

Remarque: vous devez le faire pour chaque serveur memcached.

Pour lister toutes les clés de tous les stubs, voici le one-liner (par un serveur):

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

Remarque: la commande ci-dessus peut entraîner de graves problèmes de performances lors de l'accès aux éléments. Il est donc déconseillé de l'exécuter en direct.


Remarques:

_stats cachedump_ ne vide que le _HOT_LRU_ (IIRC?), Qui est géré par un thread d'arrière-plan au fur et à mesure de l'activité. Cela signifie que, sous une nouvelle version suffisamment compatible avec l'algorithme 2Q, vous obtiendrez des instantanés de ce qu'il y a dans l'un des LRU.

Si vous souhaitez tout afficher, _lru_crawler metadump 1_ (ou _lru_crawler metadump all_) est la nouvelle méthode généralement prise en charge officiellement qui dumpera de manière asynchrone autant de clés que vous le souhaitez. vous les obtiendrez hors service, mais toutes les unités LRU seront touchées. À moins que vous ne supprimiez/remplaciez des articles, plusieurs exécutions devraient donner les mêmes résultats.

Source: GH-405 .


Apparenté, relié, connexe:

7
kenorb

Le moyen le plus simple est d’utiliser le paquet python-memcached-stats, https://github.com/abstatic/python-memcached-stats

La méthode keys () devrait vous aider.

Exemple -

from memcached_stats import MemcachedStats
mem = MemcachedStats()

mem.keys()
['key-1',
 'key-2',
 'key-3',
 ... ]
5
abhishek_M