Files
bl/common/data/share/user.go
昔念 026689f3ed ```
feat(cache): 添加复合键缓存操作支持

添加了基于 uint32+string 组合键的缓存操作方法,包括
GetByCompoundKey、SetByCompoundKey、DelByCompoundKey 和
ContainsByCompoundKey 方法,用于处理用户ID和会话ID的组合缓存场景

fix(vscode): 添加 cSpell 配置支持 struc 词汇

refactor(session): 移除过时的会话管理方法

移除了基于单一字符串键的会话管理方法,因为已迁移到使用
复合键的缓存操作方式
```
2026-01-19 18:51:56 +08:00

110 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package share
import (
"context"
"time"
"blazing/cool"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/util/gconv"
"github.com/gogf/gf/v2/util/grand"
)
// newSessionStore 创建会话缓存实例
func newSessionStore() *cacheStore[uint32] {
return &cacheStore[uint32]{
manager: cool.CacheManager,
prefix: "blazing:session:",
}
}
// newUserOnlineStore 创建用户在线状态缓存实例
func newUserOnlineStore() *cacheStore[uint16] {
return &cacheStore[uint16]{
manager: cool.CacheManager,
prefix: "blazing:useronline:",
}
}
// newEmailCodeStore 创建邮件注册码缓存实例
func newEmailCodeStore() *cacheStore[int] {
return &cacheStore[int]{
manager: cool.CacheManager,
prefix: "blazing:email:code:",
}
}
// sessionManager 会话管理器
type sessionManager struct {
sessionStore *cacheStore[uint32] // 会话缓存
userOnlineStore *cacheStore[uint16] // 用户在线状态缓存
emailCodeStore *cacheStore[int] // 邮件注册码缓存
}
// newSessionManager 创建会话管理器
func newSessionManager() *sessionManager {
return &sessionManager{
sessionStore: newSessionStore(),
userOnlineStore: newUserOnlineStore(),
emailCodeStore: newEmailCodeStore(),
}
}
// SetUserOnline 设置用户在线状态
func (m *sessionManager) SetUserOnline(userID uint32, serverID uint16) error {
return m.userOnlineStore.Set(gctx.New(), gconv.String(userID), serverID, 0)
}
// GetUserOnline 获取用户在线状态
func (m *sessionManager) GetUserOnline(userID uint32) (uint16, error) {
return m.userOnlineStore.Get(context.Background(), gconv.String(userID))
}
// DeleteUserOnline 删除用户在线状态
func (m *sessionManager) DeleteUserOnline(userID uint32) error {
return m.userOnlineStore.Del(gctx.New(), gconv.String(userID))
}
// UserOnlineExists 检查用户在线状态是否存在
func (m *sessionManager) UserOnlineExists(userID uint32) (bool, error) {
return m.userOnlineStore.Contains(context.Background(), gconv.String(userID))
}
// generate6DigitCode 生成6位数字注册码100000-999999
func (m *sessionManager) generate6DigitCode() int {
// 初始化随机数生成器(确保每次调用生成不同序列)
return grand.Intn(900000) + 100000
}
// SaveEmailCode 生成并保存邮件注册码(返回生成的验证码,支持设置过期时间)
func (m *sessionManager) SaveEmailCode(email string, expire time.Duration) (int, error) {
code := m.generate6DigitCode()
return code, m.emailCodeStore.Set(gctx.New(), email, code, expire)
}
// GetEmailCode 获取指定邮箱的注册码
func (m *sessionManager) GetEmailCode(email string) (int, error) {
return m.emailCodeStore.Get(context.Background(), email)
}
// DeleteEmailCode 删除指定邮箱的注册码(验证成功后调用)
func (m *sessionManager) DeleteEmailCode(email string) error {
return m.emailCodeStore.Del(gctx.New(), email)
}
// EmailCodeExists 检查指定邮箱是否存在有效的注册码
func (m *sessionManager) EmailCodeExists(email string) (bool, error) {
return m.emailCodeStore.Contains(context.Background(), email)
}
// VerifyEmailCode 验证用户输入的注册码是否正确
func (m *sessionManager) VerifyEmailCode(email string, inputCode int) (bool, error) {
storedCode, err := m.GetEmailCode(email)
if err != nil {
return false, err
}
return storedCode == inputCode, nil
}