Parcourir la source

refactor: Optimize user caching and token retrieval methods

1808837298@qq.com il y a 1 an
Parent
commit
b1847509a4
7 fichiers modifiés avec 21 ajouts et 8 suppressions
  1. 1 1
      controller/pricing.go
  2. 1 1
      controller/user.go
  3. 1 1
      model/token_cache.go
  4. 2 2
      model/user.go
  5. 14 1
      model/user_cache.go
  6. 1 1
      service/quota.go
  7. 1 1
      service/user_notify.go

+ 1 - 1
controller/pricing.go

@@ -17,7 +17,7 @@ func GetPricing(c *gin.Context) {
 	}
 	var group string
 	if exists {
-		user, err := model.GetUserById(userId.(int), false)
+		user, err := model.GetUserCache(userId.(int))
 		if err == nil {
 			group = user.Group
 		}

+ 1 - 1
controller/user.go

@@ -472,7 +472,7 @@ func GetUserModels(c *gin.Context) {
 	if err != nil {
 		id = c.GetInt("id")
 	}
-	user, err := model.GetUserById(id, true)
+	user, err := model.GetUserCache(id)
 	if err != nil {
 		c.JSON(http.StatusOK, gin.H{
 			"success": false,

+ 1 - 1
model/token_cache.go

@@ -52,7 +52,7 @@ func cacheSetTokenField(key string, field string, value string) error {
 func cacheGetTokenByKey(key string) (*Token, error) {
 	hmacKey := common.GenerateHMAC(key)
 	if !common.RedisEnabled {
-		return nil, nil
+		return nil, fmt.Errorf("redis is not enabled")
 	}
 	var token Token
 	err := common.RedisHGetObj(fmt.Sprintf("token:%s", hmacKey), &token)

+ 2 - 2
model/user.go

@@ -42,8 +42,8 @@ type User struct {
 	Setting          string         `json:"setting" gorm:"type:text;column:setting"`
 }
 
-func (user *User) ToBaseUser() UserBase {
-	cache := UserBase{
+func (user *User) ToBaseUser() *UserBase {
+	cache := &UserBase{
 		Id:       user.Id,
 		Group:    user.Group,
 		Quota:    user.Quota,

+ 14 - 1
model/user_cache.go

@@ -79,7 +79,7 @@ func GetUserCache(userId int) (userCache *UserBase, err error) {
 	}()
 
 	// Try getting from Redis first
-	err = common.RedisHGetObj(getUserCacheKey(userId), &userCache)
+	userCache, err = cacheGetUserBase(userId)
 	if err == nil {
 		return userCache, nil
 	}
@@ -105,6 +105,19 @@ func GetUserCache(userId int) (userCache *UserBase, err error) {
 	return userCache, nil
 }
 
+func cacheGetUserBase(userId int) (*UserBase, error) {
+	if !common.RedisEnabled {
+		return nil, fmt.Errorf("redis is not enabled")
+	}
+	var userCache UserBase
+	// Try getting from Redis first
+	err := common.RedisHGetObj(getUserCacheKey(userId), &userCache)
+	if err != nil {
+		return nil, err
+	}
+	return &userCache, nil
+}
+
 // Add atomic quota operations using hash fields
 func cacheIncrUserQuota(userId int, delta int64) error {
 	if !common.RedisEnabled {

+ 1 - 1
service/quota.go

@@ -252,7 +252,7 @@ func PreConsumeTokenQuota(relayInfo *relaycommon.RelayInfo, quota int) error {
 	//if relayInfo.TokenUnlimited {
 	//	return nil
 	//}
-	token, err := model.GetTokenById(relayInfo.TokenId)
+	token, err := model.GetTokenByKey(relayInfo.TokenKey, false)
 	if err != nil {
 		return err
 	}

+ 1 - 1
service/user_notify.go

@@ -11,7 +11,7 @@ import (
 
 func NotifyRootUser(t string, subject string, content string) {
 	user := model.GetRootUser().ToBaseUser()
-	_ = NotifyUser(&user, dto.NewNotify(t, subject, content, nil))
+	_ = NotifyUser(user, dto.NewNotify(t, subject, content, nil))
 }
 
 func NotifyUser(user *model.UserBase, data dto.Notify) error {