一个删除redis集群里面key的命令行小工具
需要带2个参数, 第1个是需要删除的文件(每个key为一行) 第2个是 查看还是删除 操作
命令行使用到的技术:
- flag支持命令行参数
- ioutil支持读取文本文件
- redis客户端支持操作redis集群
package main
import (
"context"
"flag"
"fmt"
"github.com/go-redis/redis/v8"
"io/ioutil"
"log"
"strings"
)
var (
ctx = context.Background()
)
func main() {
var config string
var option bool
flag.StringVar(&config ,"c", "", "需要删除的txt文件名称")
flag.BoolVar(&option,"o", false, "输入操作:true删除,false查看")
flag.Parse()
fmt.Println(config,option)
if config == "" {
log.Fatalln("err: ", "配置文件不能为空")
}
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{"",""},
})
err2 := rdb.ForEachShard(ctx, func(ctx context.Context, shard *redis.Client) error {
return shard.Ping(ctx).Err()
})
if err2 != nil {
panic(err2)
}
log.Println(rdb.ClientGetName(ctx))
fmt.Println("已运行init函数")
//读取txt文件,由参数-c 传入
file, err := ioutil.ReadFile(config)
if err != nil {
fmt.Println(err)
}
//log.Println(string(file))
split := strings.Split(string(file), "\n")
//fmt.Println(split)
//删除还是查看,由参数-o 决定
if option {
for _, v := range split {
if v != "" {
int64S1, _ := rdb.Del(ctx, v).Result()
if 1 != int64S1 {
fmt.Println(int64S1, v)
}
}
}
} else {
for _, v := range split {
result, _ := rdb.Get(ctx, v).Result()
fmt.Println(result)
}
}
defer rdb.Close()
}