fix: 升级 go-redis 至 v9.22.0 修复连接池 nil-ctx panic

上游竞态:调用方超时后 wantConn.ctx 被置 nil,拨号 goroutine 用 nil ctx
创建超时上下文触发 panic(go-redis#3630,v9.18.0 起修复)。
生产环境在连接池饥饿 + 请求超时风暴下每秒触发上万次。

同步将 ZRangeByScore 迁移至 ZRangeArgs:v9.22.0 将其标记为 deprecated,
golangci-lint staticcheck 拦截(SA1019)。ZRangeArgs{ByScore: true} 与原
调用发出的 Redis 命令参数完全等价(LIMIT 编码逻辑相同)。
This commit is contained in:
feeeei
2026-09-08 13:46:59 +08:00
parent 772a0382f0
commit 99eba19ffc
4 changed files with 21 additions and 16 deletions
@@ -186,10 +186,12 @@ func (c *userMsgQueueCache) ReconcileExpiredLockCandidates(ctx context.Context,
if err != nil {
return 0, err
}
members, err := c.rdb.ZRangeByScore(ctx, umqLockIndexKey, &redis.ZRangeBy{
Min: "-inf",
Max: strconv.FormatInt(nowMs, 10),
Count: int64(maxCount),
members, err := c.rdb.ZRangeArgs(ctx, redis.ZRangeArgs{
Key: umqLockIndexKey,
Start: "-inf",
Stop: strconv.FormatInt(nowMs, 10),
ByScore: true,
Count: int64(maxCount),
}).Result()
if err != nil {
return 0, fmt.Errorf("umq read lock index: %w", err)