Redis 日常运维脚本(增加集群批量删除 key 功能)

需求背景

由于应用 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. 获取指定 keysh redis-tools.sh -g "party::123"5. 删除指定 key,不支持正则表达式,原因:redisdel 命令不支持正则表达式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进行处理,非常感谢!

上一篇 2020年4月13日
下一篇 2020年4月13日

相关推荐