fix: 数据源编辑密码保留 + Redis ACL 认证支持

后端:
- UpdateInstance: 空密码和'******'都不更新密码字段,防止编辑后丢失密码
- testRedis/getRedisClient/getRedisMetrics: 增加 Username 参数支持 Redis 6.0+ ACL 认证
- username 为 'default' 或空时走传统密码认证模式

前端:
- EditInstanceDialog: Redis 用户名字段提示'6.0+ ACL 可选',密码 placeholder 改为'不修改请留空'
- CreateInstanceForm: Redis 类型也显示用户名输入框(可选),创建/测试连接时 Redis username 为空则不传
- Redis 提示文案从'无需用户名'改为'6.0+ ACL 支持用户名+密码认证'
This commit is contained in:
logan committed 2026-05-31 23:55:18 +08:00
1 parent bfb64d4dce
commit 8af868b3ca
5 files changed
+59 -34

No files matched your search

+7
View File
@@ -156,12 +156,19 @@ func getRedisClient(instance *model.Instance, db int) (*redisClientWrapper, erro
}
addr := fmt.Sprintf("%s:%d", instance.Host, instance.Port)
// Redis 6.0+ ACL: username is optional (empty = use "default" traditional auth)
redisUsername := instance.Username
if redisUsername == "default" || redisUsername == "" {
redisUsername = "" // go-redis treats empty Username as no ACL auth
}
// Always use single-node connection for query execution.
// ClusterClient does topology discovery (CLUSTER SLOTS) which fails when
// internal cluster IPs are unreachable from the client (e.g., Docker networks).
// Single-node mode works for all read-only commands on cluster nodes.
client := redis.NewClient(&redis.Options{
Addr: addr,
Username: redisUsername,
Password: password,
DB: db,
})