生产 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
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