package main import ( "fmt" "Go_Test/config" ) // InitRedis 初始化Redis连接 func InitRedis() error { var err error RedisClient, err = config.NewRedisClient(0) if err != nil { return fmt.Errorf("failed to initialize Redis: %v", err) } return nil } // 读取 Frp 服务器数量 func GetFrpServerNum() int { keys, err := RedisClient.Keys(ctx, "Frp*").Result() if err != nil { fmt.Printf("获取frp前缀的key失败: %v\n", err) return 0 } return len(keys) } // 获取 redis 中的 frp 数据用 json 格式输出 func GetFrpServerInfo() { // 获取所有 frp 服务器名称 keys, err := RedisClient.Keys(ctx, "Frp*").Result() if err != nil { fmt.Printf("获取frp前缀的key失败: %v\n", err) return } // 遍历所有 frp 服务器信息 for _, key := range keys { // 存储在结构体中 frps, err := RedisClient.HGetAll(ctx, key).Result() if err != nil { fmt.Printf("获取frp前缀的key失败: %v\n", err) return } // 将 frp 信息添加到 servers 中 server := config.ServerConfigJson{ Host: frps["Host"], Port: frps["Port"], Token: frps["Token"], } servers[key] = server } } // 获取所有 Frp 服务器信息 func GetAllFrpServerInfo() { for i := 1; i <= GetFrpServerNum(); i++ { key := fmt.Sprintf("Frp%d", i) // 使用HGet获取hash中的字段值 host, err := RedisClient.HGet(ctx, key, "Host").Result() if err != nil { fmt.Printf("获取Frp%d Host失败: %v\n", i, err) continue } port, err := RedisClient.HGet(ctx, key, "Port").Result() if err != nil { fmt.Printf("获取Frp%d Port失败: %v\n", i, err) continue } token, err := RedisClient.HGet(ctx, key, "Token").Result() if err != nil { fmt.Printf("获取Frp%d Token失败: %v\n", i, err) continue } // 将服务器信息添加到ServerConfig中 ServerConfig = append(ServerConfig, config.ServerConfig{ Host: host, Port: port, Token: token, }) } }