Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A simple script to print the size of all your Redis keys.
#!/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
@votintsev

This comment has been minimized.

Copy link

commented Jun 22, 2013

Nice work! But, how select DB? Can you help?

@hufman

This comment has been minimized.

Copy link

commented Jun 25, 2013

To select the db, change the redis_cmd to include the -n # option.

@fluxsauce

This comment has been minimized.

Copy link

commented Aug 16, 2013

Thanks, this was a nice shortcut when I was troubleshooting some odd performance problems!

@Arsenalist

This comment has been minimized.

Copy link

commented Dec 22, 2013

Exactly what I was looking for. To make this perfect, sum up the total size of the keys.

Thanks again.

@aalfson

This comment has been minimized.

Copy link

commented Aug 19, 2014

Awesome work!

@merkerxu

This comment has been minimized.

Copy link

commented Oct 30, 2014

Thanks. It's very helpful!

@mistidoi

This comment has been minimized.

Copy link

commented Dec 1, 2014

This saved me some real time today. Thanks for your good work!

@ghariharan

This comment has been minimized.

Copy link

commented Mar 4, 2015

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..

@davidwebber

This comment has been minimized.

Copy link

commented May 4, 2015

Nice! Thank you.

@moses-gangipogu

This comment has been minimized.

Copy link

commented Jun 3, 2015

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 ?

@snicky

This comment has been minimized.

Copy link

commented Sep 22, 2015

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

@emacsist

This comment has been minimized.

Copy link

commented Dec 24, 2015

It's too slow for large keys....

@sakovias

This comment has been minimized.

Copy link

commented Mar 9, 2016

Nice work! So there's no way to profile on AWS ElasticCache since DEBUG is disabled?

@pboling

This comment has been minimized.

Copy link

commented Jul 14, 2016

@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

@houchen

This comment has been minimized.

Copy link

commented Oct 9, 2016

This work for me. Awesome and niubible!!!

@creativeHats

This comment has been minimized.

Copy link

commented Jul 24, 2017

How to use with authentication?

@slenart

This comment has been minimized.

Copy link

commented Nov 2, 2017

guys, you have info command with total memory usage. iterating all keys with ineffective keys * is not a good approach.

@rndbblnn

This comment has been minimized.

Copy link

commented Jan 9, 2018

FYI: the script doesn't work if you're using Redis on AWS Elasticache, 'redis-cli debug' command not supported.

@guoruibiao

This comment has been minimized.

Copy link

commented Jul 17, 2019

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.