mirror of
https://github.com/flipped-aurora/gin-vue-admin.git
synced 2026-09-21 12:32:25 +00:00
云厂商(阿里云等)的 Redis 实例使用自定义 ACL 账号时,要求客户端以 AUTH <username> <password> 双参数方式进行鉴权。当前代码在初始化 go-redis 客户端时从未设置 Username,只会发送单参数 AUTH <password>, 连接此类实例时 Ping 报错 WRONGPASS,导致服务启动失败(panic)。 - config.Redis 新增 username 配置项 - initialize/redis.go 单机与集群两种模式的客户端初始化均传入 Username 使用默认账号或本地 Redis 时 username 留空即可,行为与原有版本完全 一致(go-redis 在 Username 为空时只发送单参数 AUTH)。 Fix #2264
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package initialize
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/config"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func initRedisClient(redisCfg config.Redis) (redis.UniversalClient, error) {
|
|
var client redis.UniversalClient
|
|
// 使用集群模式
|
|
if redisCfg.UseCluster {
|
|
client = redis.NewClusterClient(&redis.ClusterOptions{
|
|
Addrs: redisCfg.ClusterAddrs,
|
|
Username: redisCfg.Username,
|
|
Password: redisCfg.Password,
|
|
})
|
|
} else {
|
|
// 使用单例模式
|
|
client = redis.NewClient(&redis.Options{
|
|
Addr: redisCfg.Addr,
|
|
Username: redisCfg.Username,
|
|
Password: redisCfg.Password,
|
|
DB: redisCfg.DB,
|
|
})
|
|
}
|
|
pong, err := client.Ping(context.Background()).Result()
|
|
if err != nil {
|
|
global.GVA_LOG.Error("redis connect ping failed, err:", zap.String("name", redisCfg.Name), zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
global.GVA_LOG.Info("redis connect ping response:", zap.String("name", redisCfg.Name), zap.String("pong", pong))
|
|
return client, nil
|
|
}
|
|
|
|
func Redis() {
|
|
redisClient, err := initRedisClient(global.GVA_CONFIG.Redis)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
global.GVA_REDIS = redisClient
|
|
}
|
|
|
|
func RedisList() {
|
|
redisMap := make(map[string]redis.UniversalClient)
|
|
|
|
for _, redisCfg := range global.GVA_CONFIG.RedisList {
|
|
client, err := initRedisClient(redisCfg)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
redisMap[redisCfg.Name] = client
|
|
}
|
|
|
|
global.GVA_REDISList = redisMap
|
|
}
|