需求背景
由于应用 bug 造成某些特定前缀的缓存出错,需要批量清理。
Redis 日常运维脚本 中的 redis-tools.sh 仅支持删除单个 key 和 全部清理,并未实现匹配特定前缀批量删除的功能。
批量删除 key
$ redis-cli --scan --pattern "party*" | xargs -L 1 redis-cli del
变更记录
* Version 0.0.2 2020/05/16 * 修正 inputYN 多次回车,导致参数丢失问题 * 修正 部分描述信息,调整格式等 * 增加 “批量删除 key,支持正则表达式” 方法* Version 0.0.1 2020/04/26 * 创建 Redis 集群情况查询、key 查询、key 删除等功能脚本
选项
sh ${SCRIPT_NAME} [options] <value> ... -h<value>, --host=<value> Redis IP,可设置默认值参数:HOST -p<value>, --port=<value> Redis 端口,可设置默认值参数:PORT -a<value>, --password=<value> Redis 密码,可设置默认值参数:PASSWORD -c<value>, --cluster=<value> 集群相关命令,如:nodes, info -k<pattern>, --keys=<pattern> 查询 key,支持正则表达式 -g<value>, --get=<value> 获取指定 key 的值 -d<value>, --del=<value> 删除指定 key,不支持正则表达式,原因:redis 的 del 命令不支持正则表达式 -b<pattern>, --bdel=<pattern> 批量删除 key,支持正则表达式 -f, --flushall 删除所有 key --help 帮助信息 -v, --version 版本信息
示例
redis key示例数据格式: "party::123" "party::456"1. 查询集群信息,使用默认参数sh redis-tools.sh -c info2. 查询集群节点sh redis-tools.sh -h 127.0.0.1 -p 8001 -a password -c nodes3. 查询 key,支持正则表达式sh redis-tools.sh -k "party::123"sh redis-tools.sh -k "party*"4. 获取指定 key 值sh redis-tools.sh -g "party::123"5. 删除指定 key,不支持正则表达式,原因:redis 的 del 命令不支持正则表达式sh redis-tools.sh -d "party::123"6. 批量删除 key,支持正则表达式sh redis-tools.sh -b "party::123"sh redis-tools.sh -b "party*"7. 删除所有 keysh redis-tools.sh -f
脚本
$ cat redis-tools.sh#!/bin/bash#================================================================# HEADER#================================================================# Filename redis-tools.sh# Revision 0.0.2# Date 2020/04/26# Author jiangliheng# Email jiang_liheng@163.com# Website https://jiangliheng.github.io/# Description Redis 日常运维脚本# Copyright Copyright (c) jiangliheng# License GNU General Public License##================================================================# Version 0.0.2 2020/05/16# 修正 inputYN 多次回车,导致参数丢失问题# 修正 部分描述信息,调整格式等# 增加 “批量删除 key,支持正则表达式” 方法## Version 0.0.1 2020/04/26# 创建 Redis 集群情况查询、key 查询、key 删除等功能脚本##================================================================#%名称(NAME)#% ${SCRIPT_NAME} - Redis 日常运维脚本#%#%概要(SYNOPSIS)#% sh ${SCRIPT_NAME} [options] <value> ...#%#%描述(DESCRIPTION)#% Redis 日常运维脚本#%#%选项(OPTIONS)#% -h<value>, --host=<value> Redis IP,可设置默认值参数:HOST#% -p<value>, --port=<value> Redis 端口,可设置默认值参数:PORT#% -a<value>, --password=<value> Redis 密码,可设置默认值参数:PASSWORD#% -c<value>, --cluster=<value> 集群相关命令,如:nodes, info#% -k<pattern>, --keys=<pattern> 查询 key,支持正则表达式#% -g<value>, --get=<value> 获取指定 key 的值#% -d<value>, --del=<value> 删除指定 key,不支持正则表达式,原因:redis 的 del 命令不支持正则表达式#% -b<pattern>, --bdel=<pattern> 批量删除 key,支持正则表达式#% -f, --flushall 删除所有 key#% --help 帮助信息#% -v, --version 版本信息#%#%示例(EXAMPLES)#% redis key示例数据格式:#% "party::123"#% "party::456"#%#% 1. 查询集群信息,使用默认参数#% sh ${SCRIPT_NAME} -c info#%#% 2. 查询集群节点#% sh ${SCRIPT_NAME} -h 127.0.0.1 -p 8001 -a password -c nodes#%#% 3. 查询 key,支持正则表达式#% sh ${SCRIPT_NAME} -k "party::123"#% sh ${SCRIPT_NAME} -k "party*"#%#% 4. 获取指定 key 值#% sh ${SCRIPT_NAME} -g "party::123"#%#% 5. 删除指定 key,不支持正则表达式,原因:redis 的 del 命令不支持正则表达式#% sh ${SCRIPT_NAME} -d "party::123"#%#% 6. 批量删除 key,支持正则表达式#% sh ${SCRIPT_NAME} -b "party::123"#% sh ${SCRIPT_NAME} -b "party*"#%#% 7. 删除所有 key#% sh ${SCRIPT_NAME} -f#%#================================================================# END_OF_HEADER#================================================================# header 总行数SCRIPT_HEADSIZE=$(head -200 "${0}" |grep -n "^# END_OF_HEADER" | cut -f1 -d:)# 脚本名称SCRIPT_NAME="$(basename "${0}")"# 版本VERSION="0.0.2"# 默认 hostHOST=127.0.0.1# 默认 portPORT=8001# 默认 passwordPASSWORD=password# usageusage() { head -"${SCRIPT_HEADSIZE:-99}" "${0}" | grep -e "^#%" | sed -e "s/^#%//g" -e "s/${SCRIPT_NAME}/${SCRIPT_NAME}/g" -e "s/${VERSION}/${VERSION}/g"}# redis-cli 方法cli() { printf " 33[36mredis-cli -c -h %s -p %s -a %s %s "%s"" 33[0mnn"" ""${HOST}"" ""${PORT}"" ""${PASSWORD}"" ""$1"" ""$2"" eval redis-cli -c -h ""${HOST}"" -p ""${PORT}"" -a ""${PASSWORD}"" ""$1"" """"$2""""}# clusterCli 方法clusterCli() { printf "" 33[36mredis-cli -c -h %s -p %s -a %s cluster %s 33[0mnn"" ""${HOST}"" ""${PORT}"" ""${PASSWORD}"" ""$1"" eval redis-cli -c -h ""${HOST}"" -p ""${PORT}"" -a ""${PASSWORD}"" cluster ""$1""}# 查询 master 节点masterNodes() { masterNodes=$(clusterCli nodes | awk '{if($3==""master"" || $3==""myself
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!