|
|
@@ -17,6 +17,7 @@ var ( |
|
|
|
// UserInfoProvider 定义了一个接口来管理用户信息的获取 |
|
|
|
type UserInfoProvider interface { |
|
|
|
GetUserInfo(uid int64) (*model.User, error) |
|
|
|
ClearCache() |
|
|
|
} |
|
|
|
|
|
|
|
// userInfoProvider 实现了 UserInfoProvider 接口 |
|
|
@@ -25,6 +26,13 @@ type userInfoProvider struct { |
|
|
|
mu sync.RWMutex |
|
|
|
} |
|
|
|
|
|
|
|
// NewUserInfoProvider 创建一个新的 userInfoProvider 实例 |
|
|
|
func NewUserInfoProvider() UserInfoProvider { |
|
|
|
return &userInfoProvider{ |
|
|
|
userCache: make(map[int64]string), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// GetUserInfoProvider 返回 userInfoProvider 的单例实例 |
|
|
|
func GetUserInfoProvider() UserInfoProvider { |
|
|
|
once.Do(func() { |
|
|
@@ -60,6 +68,13 @@ func (p *userInfoProvider) GetUserInfo(uid int64) (*model.User, error) { |
|
|
|
return userModel, err |
|
|
|
} |
|
|
|
|
|
|
|
// 将用户信息转换为 JSON 字符串 |
|
|
|
userBytes, err := json.Marshal(userModel) |
|
|
|
if err != nil { |
|
|
|
return nil, fmt.Errorf("failed to marshal user info: %w", err) |
|
|
|
} |
|
|
|
userStr = string(userBytes) |
|
|
|
|
|
|
|
// 缓存到内存中 |
|
|
|
p.mu.Lock() //上"写"锁 |
|
|
|
p.userCache[uid] = string(userStr) |
|
|
@@ -67,3 +82,10 @@ func (p *userInfoProvider) GetUserInfo(uid int64) (*model.User, error) { |
|
|
|
|
|
|
|
return userModel, nil |
|
|
|
} |
|
|
|
|
|
|
|
// ClearCache 清空缓存 |
|
|
|
func (p *userInfoProvider) ClearCache() { |
|
|
|
p.mu.Lock() // 上"写"锁 |
|
|
|
p.userCache = make(map[int64]string) |
|
|
|
p.mu.Unlock() // 释放"写"锁 |
|
|
|
} |