#!/bin/sh
## 該腳本用來查詢redis集群中,哪些key是沒有設置過期時間,對應只需要修改redis的其中一個實例的 host和port
## 腳本會自動識別出該集群的所有實例,並查出對應實例中的所有key
## 該腳本只適用於測試環境,因為查keys 操作會影響 redis的性能,量大的情況下,會導致redis卡頓
## 建議建立一個獨立的目錄來執行腳本,重復執行腳本,會先清空部分記錄中間結果的文件內容
host=10.240.47.147
port=7000
# 獲取redis集群各實例的 host 和 port
redis-cli -h $host -p $port cluster nodes| grep master | awk '{print $2}' | awk -F ':' '{print $1 " " $2 }' > redis_object.info
# 清空用來記錄各個實例的 keys 的文件內容
more redis_object.info | grep -v ^$ | while read line
do
#echo "**** " $line
h=`echo $line | awk '{print $1}'`
p=`echo $line | awk '{print $2}'`
#echo "----" $h "---" $p "---"
> keys_for_each_redis_object_${h}_${p}.log
done
# 獲取redis各實例最新的keys 情況
more redis_object.info | grep -v ^$ | while read line
do
h=`echo $line | awk '{print $1}' `
p=`echo $line | awk '{print $2}'`
redis-cli -h $h -p $p keys 1_9_* >> keys_for_each_redis_object_${h}_${p}.log
done
#打印各個實例中 沒有設置過期時間的key
more keys_for_each_redis_object*.log| grep -v ^$ | while read mykey
do
result=`redis-cli -h $host -p $port -c ttl $mykey`
if [ $result -eq -1 ]
then
echo $mykey
fi
done