Skip to content

Instantly share code, notes, and snippets.

@epicserve
Last active February 21, 2024 18:30
Show Gist options
  • Save epicserve/5699837 to your computer and use it in GitHub Desktop.
Save epicserve/5699837 to your computer and use it in GitHub Desktop.
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
@sg552
Copy link

sg552 commented Jan 14, 2020

it doesn't work on ubuntu 18.

Just calculate the size by your brain, the serializedsize unit is 'byte', so 1024 = 1k, 1024000 = 1MB

@16g
Copy link

16g commented Nov 15, 2022

Nice!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment