-
Star
(195)
You must be signed in to star a gist -
Fork
(66)
You must be signed in to fork a gist
-
-
Save epicserve/5699837 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
# This script prints out all of your Redis keys and their size in a human readable format | |
# Copyright 2013 Brent O'Connor | |
# License: http://www.apache.org/licenses/LICENSE-2.0 | |
human_size() { | |
awk -v sum="$1" ' BEGIN {hum[1024^3]="Gb"; hum[1024^2]="Mb"; hum[1024]="Kb"; for (x=1024^3; x>=1024; x/=1024) { if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x]; break; } } if (sum<1024) print "1kb"; } ' | |
} | |
redis_cmd='redis-cli' | |
# get keys and sizes | |
for k in `$redis_cmd keys "*"`; do key_size_bytes=`$redis_cmd debug object $k | perl -wpe 's/^.+serializedlength:([\d]+).+$/$1/g'`; size_key_list="$size_key_list$key_size_bytes $k\n"; done | |
# sort the list | |
sorted_key_list=`echo -e "$size_key_list" | sort -n` | |
# print out the list with human readable sizes | |
echo -e "$sorted_key_list" | while read l; do | |
if [[ -n "$l" ]]; then | |
size=`echo $l | perl -wpe 's/^(\d+).+/$1/g'`; hsize=`human_size "$size"`; key=`echo $l | perl -wpe 's/^\d+(.+)/$1/g'`; printf "%-10s%s\n" "$hsize" "$key"; | |
fi | |
done |
To select the db, change the redis_cmd to include the -n # option.
Thanks, this was a nice shortcut when I was troubleshooting some odd performance problems!
Exactly what I was looking for. To make this perfect, sum up the total size of the keys.
Thanks again.
Awesome work!
Thanks. It's very helpful!
This saved me some real time today. Thanks for your good work!
But will the 'serializedlength' include the index size(and all other relavant stuffs) redis maintains for that key?? I need the entire memory size consumed by redis for a single key..
Nice! Thank you.
0.00 Gb ERR unknown command 'debug'
redis-cli -h amazonaws.redis.hostname DEBUG OBJECT
(error) ERR unknown command 'DEBUG'
any idea on this error ?
If you use an external Redis hosting you might have the DEBUG
command disabled. For example, this is a list of disabled commands on one of popular Redis providers: CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, DEBUG, and KEYS
It's too slow for large keys....
Nice work! So there's no way to profile on AWS ElasticCache since DEBUG
is disabled?
@sakovias - Seems correct. http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/ClientConfig.RestrictedCommands.html
Only option for AWS ElastiCache is to use a tool that does not rely on debug, perhaps: https://github.com/antirez/redis-sampler
This work for me. Awesome and niubible!!!
How to use with authentication?
guys, you have info
command with total memory usage. iterating all keys with ineffective keys * is not a good approach.
FYI: the script doesn't work if you're using Redis on AWS Elasticache, 'redis-cli debug' command not supported.
guys, you have
info
command with total memory usage. iterating all keys with ineffective keys * is not a good approach.
that's really a bad idea by using this script on product environment. Maybe using scan
command to get the keys by application, and then apply this script can get a better efficientily.
guys, you have
info
command with total memory usage. iterating all keys with ineffective keys * is not a good approach.that's really a bad idea by using this script on product environment. Maybe using
scan
command to get the keys by application, and then apply this script can get a better efficientily.
Agree
what does that -e does in echo?
@navi2589, Try running the following and see what it does.
echo -e "Blah\nFoo\n\nBar"
it doesn't work on ubuntu 18.
Just calculate the size by your brain, the serializedsize unit is 'byte', so 1024 = 1k, 1024000 = 1MB
Nice!
Nice work! But, how select DB? Can you help?