-
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 |
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
infocommand 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
infocommand 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
scancommand 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!
It's too slow for large keys....