# Redis数据清空脚本(支持全量/指定前缀清空)# 作者:编程助手# 适用场景:清理Redis大缓存、解决输出缓冲区超限问题# ===================== 配置区(修改为你的Redis信息)=====================REDIS_HOST="172.17.235.243" # Redis IP/域名REDIS_PORT="6379" # Redis端口REDIS_PASSWORD="your_redis_pwd" # Redis密码(无密码则留空,如 "")CLEAR_MODE="prefix" # 清空模式:all=全量清空,prefix=指定前缀清空CLEAR_PREFIXES=("jeplus:*" "cache:*" "ehcache:*") # 要清空的key前缀(仅prefix模式生效)# =======================================================================# 颜色输出函数(方便区分日志级别)red() { echo -e "\033[31m$1\033[0m"; }green() { echo -e "\033[32m$1\033[0m"; }yellow() { echo -e "\033[33m$1\033[0m"; }blue() { echo -e "\033[34m$1\033[0m"; }# 第一步:验证Redis连通性blue "===== 1. 验证Redis连通性 ====="if [ -n "$REDIS_PASSWORD" ]; thenPING_RESULT=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD ping 2>/dev/null)elsePING_RESULT=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT ping 2>/dev/null)fiif [ "$PING_RESULT" != "PONG" ]; thenred "❌ Redis连接失败!请检查IP/端口/密码是否正确"exit 1elsegreen "✅ Redis连接成功"fi# 第二步:显示清空模式和范围blue "\n===== 2. 清空配置确认 ====="if [ "$CLEAR_MODE" = "all" ]; thenred "⚠️ 清空模式:全量清空(会删除Redis中所有数据!)"elseyellow "⚠️ 清空模式:指定前缀清空"echo " 清空前缀列表:${CLEAR_PREFIXES[*]}"fi# 第三步:操作确认(防止误删)read -p "$(red "===== 3. 确认操作 =====\n是否继续清空Redis数据?(y/n):")" CONFIRMif [ "$CONFIRM" != "y" ]; thenyellow "❎ 用户取消操作,脚本退出"exit 0fi# 第四步:执行清空操作blue "\n===== 4. 开始清空数据 ====="if [ "$CLEAR_MODE" = "all" ]; then# 全量清空(危险操作,需二次确认)read -p "$(red "⚠️ 确认全量清空Redis所有数据?(输入 YES 确认):")" DOUBLE_CONFIRMif [ "$DOUBLE_CONFIRM" = "YES" ]; thenif [ -n "$REDIS_PASSWORD" ]; thenredis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD FLUSHALLelseredis-cli -h $REDIS_HOST -p $REDIS_PORT FLUSHALLfigreen "✅ Redis全量数据清空完成"elsered "❌ 二次确认失败,取消全量清空"exit 0fielse# 指定前缀清空(安全模式)TOTAL_DELETED=0for PREFIX in "${CLEAR_PREFIXES[@]}"; doblue "🔍 查找前缀[$PREFIX]的key..."if [ -n "$REDIS_PASSWORD" ]; thenKEYS=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD KEYS "$PREFIX" 2>/dev/null)elseKEYS=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT KEYS "$PREFIX" 2>/dev/null)fiif [ -z "$KEYS" ]; thenyellow "ℹ️ 前缀[$PREFIX]未找到任何key,跳过"continuefi# 批量删除key(避免xargs参数过长)KEY_COUNT=$(echo "$KEYS" | wc -l)if [ -n "$REDIS_PASSWORD" ]; thenecho "$KEYS" | xargs -I {} redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD DEL {} >/dev/null 2>&1elseecho "$KEYS" | xargs -I {} redis-cli -h $REDIS_HOST -p $REDIS_PORT DEL {} >/dev/null 2>&1figreen "✅ 前缀[$PREFIX]:删除$KEY_COUNT个key"TOTAL_DELETED=$((TOTAL_DELETED + KEY_COUNT))donegreen "\n✅ 总计删除$TOTAL_DELETED个key,清空完成"fi# 第五步:验证结果blue "\n===== 5. 验证清空结果 ====="if [ "$CLEAR_MODE" = "all" ]; thenKEY_COUNT=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD DBSIZE 2>/dev/null)green "✅ Redis当前总key数:$KEY_COUNT(全量清空后应为0)"else# 验证指定前缀是否还有keyfor PREFIX in "${CLEAR_PREFIXES[@]}"; doif [ -n "$REDIS_PASSWORD" ]; thenREMAIN_KEYS=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD KEYS "$PREFIX" 2>/dev/null | wc -l)elseREMAIN_KEYS=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT KEYS "$PREFIX" 2>/dev/null | wc -l)figreen "✅ 前缀[$PREFIX]剩余key数:$REMAIN_KEYS(应为0)"donefiblue "\n===== 操作完成 =====\n提示:清空后建议重启依赖Redis的应用(如Tomcat),避免缓存读取异常"
📝 使用说明
1.先修改脚本顶部的配置区:
REDIS_HOST:改为你的 Redis IP(如
172.17.235.243)REDIS_PASSWORD:改为你的 Redis 密码(无密码则留空
"")CLEAR_MODE:prefix:仅清空指定前缀的 key(推荐,安全)all:全量清空 Redis(谨慎使用)CLEAR_PREFIXES:指定要清空的 key 前缀
2. 执行脚本
# 1. 保存脚本为 clear_redis.shvim clear_redis.sh# 2. 添加执行权限chmod +x clear_redis.sh# 3. 执行脚本./clear_redis.sh
3. 关键特性
✅ 连通性验证:先检查 Redis 是否能连接,避免无效操作 ✅ 双重确认:全量清空需输入 YES二次确认,防止误删✅ 批量删除:支持大量 key 删除,避免参数过长报错 ✅ 结果验证:清空后自动检查剩余 key 数,确认效果