前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 日常运维脚本

Redis 日常运维脚本

作者头像
叨叨软件测试
发布2020-05-07 21:14:26
1.2K0
发布2020-05-07 21:14:26
举报

需求背景

生产 Redis 日常运维需要。

前提

添加 Redis 可执行命令到系统环境变量中。

 1$ cat redis-profile.sh
 2export PATH=/usr/local/redis-5.0.7/src/:$PATH
 3
 4# 添加到系统环境变量
 5$ cp redis-profile.sh /etc/profile.d/
 6
 7# 实时生效
 8$ source /etc/profile.d/redis-profile.sh
 9
10# 验证
11$ redis-cli -v

简介

1Filename         redis-tools.sh
2Revision         0.0.1
3Date             2020/04/26
4Author           jiangliheng
5Email            jiang_liheng@163.com
6Website          https://jiangliheng.github.io/
7Description      Redis 日常运维脚本
8Copyright        Copyright (c) jiangliheng
9License          GNU General Public License

概要

redis-tools.sh [option]<value> …

选项

 1-h<value>, --host=<value>            Redis IP,可设置默认值参数:HOST
 2-p<value>, --port=<value>            Redis 端口,可设置默认值参数:PORT
 3-a<value>, --password=<value>        Redis 密码,可设置默认值参数:PASSWORD
 4-c<value>, --cluster=<value>         集群相关命令,如:nodes, info
 5-g<value>, --get=<value>             获取指定 key 的值
 6-d<value>, --del=<value>             删除指定 key
 7-k<value>, --keys=<value>            查询 key
 8-f, --flushall                       删除所有 key
 9--help                               帮助信息
10-v, --version                        版本信息

示例

 11. 查询集群信息,使用默认参数
 2sh redis-tools.sh -c info
 3
 42. 查询集群节点
 5sh redis-tools.sh -h 127.0.0.1 -p 8001 -a password -c nodes
 6
 73. 获取指定 key 值
 8sh redis-tools.sh -g key
 9
104. 删除指定 key
11sh redis-tools.sh -d key
12
135. 查询 key
14sh redis-tools.sh -k key
15
166. 删除所有 key
17sh redis-tools.sh -f

redis-tools.sh

  1$ cat redis-tools.sh
  2#!/bin/bash
  3#================================================================
  4# HEADER
  5#================================================================
  6#    Filename         redis-tools.sh
  7#    Revision         0.0.1
  8#    Date             2020/04/26
  9#    Author           jiangliheng
 10#    Email            jiang_liheng@163.com
 11#    Website          https://jiangliheng.github.io/
 12#    Description      Redis 日常运维脚本
 13#    Copyright        Copyright (c) jiangliheng
 14#    License          GNU General Public License
 15#
 16#================================================================
 17#  Version 0.0.1
 18#     Redis 集群情况查询、key 查询、key 删除等
 19#
 20#================================================================
 21#%名称(NAME)
 22#%       ${SCRIPT_NAME} - Redis 日常运维脚本
 23#%
 24#%概要(SYNOPSIS)
 25#%       sh ${SCRIPT_NAME} [option] <value> ...
 26#%
 27#%描述(DESCRIPTION)
 28#%       Redis 日常运维脚本
 29#%
 30#%选项(OPTIONS)
 31#%       -h<value>, --host=<value>            Redis IP,可设置默认值参数:HOST
 32#%       -p<value>, --port=<value>            Redis 端口,可设置默认值参数:PORT
 33#%       -a<value>, --password=<value>        Redis 密码,可设置默认值参数:PASSWORD
 34#%       -c<value>, --cluster=<value>         集群相关命令,如:nodes, info
 35#%       -g<value>, --get=<value>             获取指定 key 的值
 36#%       -d<value>, --del=<value>             删除指定 key
 37#%       -k<value>, --keys=<value>            查询 key
 38#%       -f, --flushall                       删除所有 key
 39#%       --help                               帮助信息
 40#%       -v, --version                        版本信息
 41#%
 42#%示例(EXAMPLES)
 43#%       1. 查询集群信息,使用默认参数
 44#%       sh ${SCRIPT_NAME} -c info
 45#%
 46#%       2. 查询集群节点
 47#%       sh ${SCRIPT_NAME} -h 127.0.0.1 -p 8001 -a password -c nodes
 48#%
 49#%       3. 获取指定 key 值
 50#%       sh ${SCRIPT_NAME} -g key
 51#%
 52#%       4. 删除指定 key
 53#%       sh ${SCRIPT_NAME} -d key
 54#%
 55#%       5. 查询 key
 56#%       sh ${SCRIPT_NAME} -k key
 57#%
 58#%       6. 删除所有 key
 59#%       sh ${SCRIPT_NAME} -f
 60#%
 61#================================================================
 62# END_OF_HEADER
 63#================================================================
 64
 65# header 总行数
 66SCRIPT_HEADSIZE=$(head -200 "${0}" |grep -n "^# END_OF_HEADER" | cut -f1 -d:)
 67# 脚本名称
 68SCRIPT_NAME="$(basename "${0}")"
 69# 版本
 70VERSION="0.0.1"
 71
 72# 默认 host
 73HOST=127.0.0.1
 74# 默认 port
 75PORT=8001
 76# 默认 password
 77PASSWORD=password
 78
 79# usage
 80usage() {
 81  head -"${SCRIPT_HEADSIZE:-99}" "${0}" \
 82  | grep -e "^#%" \
 83  | sed -e "s/^#%//g" -e "s/\${SCRIPT_NAME}/${SCRIPT_NAME}/g" -e "s/\${VERSION}/${VERSION}/g"
 84}
 85
 86# redis-cli 方法
 87cli() {
 88  printf "\033[36mredis-cli -c -h %s -p %s -a %s %s \"%s\" \033[0m\n\n" "${HOST}" "${PORT}" "${PASSWORD}" "$1" "$2"
 89  eval redis-cli -c -h "${HOST}" -p "${PORT}" -a "${PASSWORD}" "$1" \""$2"\"
 90}
 91
 92# clusterCli 方法
 93clusterCli() {
 94  printf "\033[36mredis-cli -c -h %s -p %s -a %s cluster %s \033[0m\n\n" "${HOST}" "${PORT}" "${PASSWORD}" "$1"
 95  eval redis-cli -c -h "${HOST}" -p "${PORT}" -a "${PASSWORD}" cluster "$1"
 96}
 97
 98# 查询 master 节点
 99masterNodes() {
100  masterNodes=$(clusterCli nodes | awk '{if($3=="master" || $3=="myself,master") print $2}' | awk -F@ '{print $1}')
101  printf "\033[36mRedis master nodes: \n%s\n\033[0m" "${masterNodes}"
102}
103
104# 清理所有 key
105flushallCli() {
106  masterNodes
107
108  # 循环清理
109  for master in ${masterNodes}
110  do
111    thost=${master%:*}
112    tport=${master#*:}
113    printf "\033[36m\nredis-cli -c -h %s -p %s -a %s flushall \033[0m\n" "${thost}" "${tport}" "${PASSWORD}"
114    eval redis-cli -c -h "${thost}" -p "${tport}" -a "${PASSWORD}" flushall
115  done
116}
117
118# 查询 key
119keysCli() {
120  masterNodes
121
122  # 循环查询 key
123  for master in ${masterNodes}
124  do
125    thost=${master%:*}
126    tport=${master#*:}
127    printf "\033[36m\nredis-cli -c -h %s -p %s -a %s keys \"%s\" \033[0m\n" "${thost}" "${tport}" "${PASSWORD}" "$1"
128    eval redis-cli -c -h "${thost}" -p "${tport}" -a "${PASSWORD}" keys \""$1"\"
129  done
130}
131
132# 操作确认
133inputYN() {
134  read -r -p "是否继续 \"$1\" 操作(y/n):" choose
135  case "${choose}" in
136    [yY])
137      return 0
138      ;;
139
140    [nN])
141      exit 1
142      ;;
143
144    *)
145      inputYN
146      ;;
147  esac
148}
149
150# 判断参数个数
151if [ $# -eq 0 ];
152then
153  usage
154  exit 1
155fi
156
157# getopt 命令行参数
158if ! ARGS=$(getopt -o vfh:p:a:g:d:c:k: --long flushall,help,version,host:,port:,password:,get:,del:,password:,cluster:,keys: -n "${SCRIPT_NAME}" -- "$@")
159then
160  # 无效选项,则退出
161  exit 1
162fi
163
164# 命令行参数格式化
165eval set -- "${ARGS}"
166
167while [ -n "$1" ]
168do
169  case "$1" in
170    -a|--password)
171      PASSWORD=$2
172      shift 2
173      ;;
174
175    -h|--host)
176      HOST=$2
177      shift 2
178      ;;
179
180    -p|--port)
181      PORT="$2"
182      shift 2
183      ;;
184
185    -c|--cluster)
186      clusterCli "$2"
187      exit 1
188      ;;
189
190    -g|--get)
191      cli get "$2"
192      exit 1
193      ;;
194
195    -d|--del)
196      # 先显示内容
197      cli get "$2"
198      # 确认是否删除
199      inputYN "del"
200      # 删除
201      cli del "$2"
202      exit 1
203      ;;
204
205    -k|--keys)
206      keysCli "$2"
207      exit 1
208      ;;
209
210    -f|--flushall)
211      # 确认是否删除
212      inputYN "flushall"
213      # 删除所有 key
214      flushallCli
215      exit 1
216      ;;
217
218    -v|--version)
219      printf "%s version %s\n" "${SCRIPT_NAME}" "${VERSION}"
220      exit 1
221      ;;
222
223    --help)
224      usage
225      exit 1
226      ;;
227
228    --)
229      shift
230      break
231      ;;
232
233    *)
234      printf "%s is not an option!" "$1"
235      exit 1
236      ;;
237
238  esac
239done
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叨叨软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求背景
  • 前提
  • 简介
  • 概要
  • 选项
  • 示例
  • redis-tools.sh
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档