Mon instance de redis semble devenir très volumineuse et j'aimerais savoir laquelle des multiples bases de données que j'utilise contient combien de mémoire. La commande INFO
de Redis ne fait que me montrer la taille totale et le nombre de clés par base de données, ce qui ne me donne pas beaucoup d'informations. apprécié.
La documentation de Redis ne m'indique aucune commande qui puisse restituer la mémoire consommée de certaines clés, donc je suppose que si un code buggy écrit beaucoup de "corbeille" dans redis, cela pourrait être vraiment difficile à trouver ...
Donc, ma solution à mon propre problème: après avoir joué avec redis-cli
un peu plus longtemps, j'ai découvert que DEBUG OBJECT <key>
révèle quelque chose comme le serializedlength
de key, qui était en fait quelque chose que je cherchais ...
Pour une base de données complète, vous devez regrouper toutes les valeurs de KEYS *
qui ne devrait pas être trop difficile avec un langage de script de votre choix ...
La mauvaise chose est que redis.io n'a pas vraiment beaucoup d'informations sur DEBUG OBJECT
.
La solution des commentaires mérite sa propre réponse:
redis-cli --bigkeys
MEMORY USAGE key
La commande vous donne le nombre d'octets qu'une clé et sa valeur doivent être stockés dans la RAM.
L'utilisation rapportée est le total des allocations de mémoire pour les frais généraux de données et administratifs qu'une clé nécessite pour sa valeur (documentation source redis)
Jetez un coup d'œil à ce projet, il affiche des statistiques intéressantes sur les espaces clés basés sur les regex et les préfixes. Il utilise le DEBUG OBJECT
commande et balaie la base de données, identifiant des groupes de clés et estimant le pourcentage d'espace occupé.
https://github.com/snmaynard/redis-audit
La sortie ressemble à ceci:
Summary
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
Key | Memory Usage | Expiry Proportion | Last Access Time
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
notification_3109439 | 88.14% | 0.0% | 2 minutes
user_profile_3897016 | 11.86% | 99.98% | 20 seconds
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
Ou celui-ci: https://github.com/sripathikrishnan/redis-rdb-tools qui effectue une analyse complète de l’espace clé en analysant un fichier dump.rdb hors connexion. Celui-ci fonctionne bien aussi. Il peut vous donner la taille moy/min/max pour les entrées de votre base de données et le fera même en fonction d’un préfixe.
Vous trouverez peut-être très utile de goûter aux clés Redis et de les regrouper par type. Salvatore a écrit un outil appelé redis-sampler qui émet environ 10000 commandes RANDOMKEY
suivies d'un TYPE
sur les clés récupérées. En quelques secondes ou minutes, vous devriez obtenir une vue assez précise de la distribution des types de clé.
J'ai écrit une extension (malheureusement pas n'importe où open-source car elle est liée au travail), qui ajoute un peu d'introspection de noms de clés via des expressions régulières qui vous donnent une idée des types de clés d'application (en fonction de la structure de dénomination utilisée). utilisant), sont stockés dans Redis. Combiné à la sortie plus générale de redis-sampler, cela devrait vous donner une très bonne idée de ce qui se passe.
Peut-être que vous pouvez faire une introspection sur le fichier db. Le protocole est relativement simple (mais pas bien documenté), vous pouvez donc écrire un analyseur syntaxique pour déterminer les clés individuelles occupant beaucoup de place.
Nouvelles suggestions:
Avez-vous essayé d'utiliser MONITOR
pour voir ce qui est écrit, en direct? Peut-être que vous pouvez trouver le problème avec les données en mouvement.
Vous pouvez utiliser une application .net https://github.com/abhiyx/RedisSizeCalculator pour calculer la taille de la clé redis,
S'il vous plaît n'hésitez pas à donner vos commentaires pour le même