redis中獲取每個資料型別top-n的bigkeys資訊
阿新 • • 發佈:2018-12-25
需求:之前寫的指令碼獲取redis 最大的top-n的bigkeys,沒有區分資料型別,如果要針對每個資料型別的前top-n的bigkeys獲取呢?
db_ip=5.5.5.101 db_port=6379 password=abc123 cursor=0 cnt=100 new_cursor=0 function get_key() { redis-cli -h $db_ip -p $db_port -a $password scan $1 count $cnt > scan_tmp_result new_cursor=`sed -n '1p' scan_tmp_result` sed-n '2,$p' scan_tmp_result > scan_result } function get_keyinfo() { cat $1 |while read line do key_size=`redis-cli -h $db_ip -p $db_port -a $password memory usage $line` key_type=`redis-cli -h $db_ip -p $db_port -a $password type $line` echo $line $key_type $key_size>> "$key_type.txt" done } get_key $cursor get_keyinfo scan_result while [ $cursor -ne $new_cursor ] do get_key $new_cursor get_keyinfo scan_result done all_types="string list set hash zset" for type in $all_types do echo "-----------top $1 $type data type-----------" if[[ -f "$type.txt" ]];then cat "$type.txt" | sort -nrk3 | sed -n "1,$1p" else echo "The instance does not have $type data type" fi done rm -rf scan_tmp_result rm -rf scan_result rm -rf string.txt rm -rf set.txt
測試結果:
[[email protected] ~]$ sh get_type_top.sh 5 -----------top 5 string data type----------- test2 string 12325 test string 1589 c_9 string 49 c_99 string 49 c_999 string 49 -----------top 5 list data type----------- c list 885 b list 553 -----------top 5 set data type----------- hello set 285 world set 71 -----------top 5 hash data type----------- The instance does not have hash data type -----------top 5 zset data type----------- The instance does not have zset data type