热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

redis里显示key大小的shell脚本

redis里可以显示key大小的shell脚本,很方便的定位redis里有哪些大key。脚本内容如下:#catredis-print-keysize.sh#!usrbine

redis里可以显示key大小的shell脚本,很方便的定位redis里有哪些大key。

脚本内容如下:

# cat redis-print-keysize.sh

#!/usr/bin/env bash


human_size() {

        awk -v sum="$1" &#39; 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"; } &#39;

}


#redis_cmd=&#39;redis-cli&#39;


redis_cmd=&#39;redis-cli -n 10&#39;



# get keys and sizes

for k in `$redis_cmd keys "*"`; do key_size_bytes=`$redis_cmd debug object $k | perl -wpe &#39;s/^.+serializedlength:([\d]+).+$/$1/g&#39;`; 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 &#39;s/^(\d+).+/$1/g&#39;`; hsize=`human_size "$size"`; key=`echo $l | perl -wpe &#39;s/^\d+(.+)/$1/g&#39;`; printf "%-10s%s\n" "$hsize" "$key";

    fi

done



脚本说明:

扫描哪个db,修改脚本里对应redis_cmd的位置,加入 -n选项,例如:


# redis-cli info  keyspace | grep db10

db10:keys=6,expires=0,avg_ttl=0


显示db10的里的6个key的大小:

将redis_cmd=&#39;redis-cli&#39;改为redis_cmd=&#39;redis-cli -n 10&#39;

运行:

# ./redis_key_sizes.sh

1kb        prod_domain_error

1kb        prod_solr_error

200.86 Kb  test_buffer_error

241.55 Kb  prod_comment_error

19.20 Mb   prod_ref_15_error

70.55 Mb   prod_ref_151_error



推荐阅读
author-avatar
燕过无痕GY_274
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有