1. 程式人生 > >redis中獲取每個資料型別top-n的bigkeys資訊

redis中獲取每個資料型別top-n的bigkeys資訊

 

需求:之前寫的指令碼獲取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