server: Go 服务器(REST+WSS 网关+JWT+Argon2+配对+素材直链+任务状态机);修复并发下线 send-on-closed-channel、下发查询 SQL 优先级、配对码原子占用、上传体积上限、JWT 默认密钥告警
This commit is contained in:
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
|
||||
"everypublish/server/internal/config"
|
||||
)
|
||||
|
||||
// Redis 封装(D4 起 asynq 队列同源共用)
|
||||
type Redis struct {
|
||||
client *redis.Client
|
||||
}
|
||||
|
||||
// New 建立 Redis 连接
|
||||
func New(cfg *config.Config) *Redis {
|
||||
client := redis.NewClient(&redis.Options{Addr: cfg.RedisAddr, Password: cfg.RedisPass, DB: 0})
|
||||
return &Redis{client: client}
|
||||
}
|
||||
|
||||
// Ping 探测
|
||||
func (r *Redis) Ping() error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||||
defer cancel()
|
||||
return r.client.Ping(ctx).Err()
|
||||
}
|
||||
|
||||
// Client 暴露底层客户端
|
||||
func (r *Redis) Client() *redis.Client { return r.client }
|
||||
Vendored
+32
@@ -0,0 +1,32 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
// SaveRefresh 登记刷新令牌(jti 白名单,用于轮换与登出吊销)
|
||||
func (r *Redis) SaveRefresh(uid uint64, jti string, ttl time.Duration) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
key := fmt.Sprintf("refresh:%d:%s", uid, jti)
|
||||
return r.client.Set(ctx, key, "1", ttl).Err()
|
||||
}
|
||||
|
||||
// ExistsRefresh 校验刷新令牌是否有效
|
||||
func (r *Redis) ExistsRefresh(uid uint64, jti string) (bool, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
key := fmt.Sprintf("refresh:%d:%s", uid, jti)
|
||||
n, err := r.client.Exists(ctx, key).Result()
|
||||
return n == 1, err
|
||||
}
|
||||
|
||||
// DeleteRefresh 吊销刷新令牌
|
||||
func (r *Redis) DeleteRefresh(uid uint64, jti string) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
defer cancel()
|
||||
key := fmt.Sprintf("refresh:%d:%s", uid, jti)
|
||||
return r.client.Del(ctx, key).Err()
|
||||
}
|
||||
Reference in New Issue
Block a user