#!/bin/sh
## 该脚本用来查询redis集群中,哪些key是没有设置过期时间,对应只需要修改redis的其中一个实例的 host和port
## 脚本会自动识别出该集群的所有实例,并查出对应实例中的所有key
## 该脚本只适用于测试环境,因为查keys 操作会影响 redis的性能,量大的情况下,会导致redis卡顿
## 建议建立一个独立的目录来执行脚本,重复执行脚本,会先清空部分记录中间结果的文件内容
host=10.240.47.147port=7000
# 获取redis集群各实例的 host 和 portredis-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 linedo #echo "**** " $line h=`echo $line | awk '{print $1}'` p=`echo $line | awk '{print $2}'` #echo "----" $h "---" $p "---" > keys_for_each_redis_object_${h}_${p}.logdone
# 获取redis各实例最新的keys 情况more redis_object.info | grep -v ^$ | while read linedo 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}.logdone
#打印各个实例中 没有设置过期时间的key
more keys_for_each_redis_object*.log| grep -v ^$ | while read mykeydo result=`redis-cli -h $host -p $port -c ttl $mykey` if [ $result -eq -1 ] then echo $mykey fi
done
转载于:https://www.cnblogs.com/linlianhuan/p/9870814.html