Browse Source

fix: update cached user quota after post-consuming (close #204)

JustSong 2 years ago
parent
commit
737672fb0b
2 changed files with 16 additions and 0 deletions
  1. 4 0
      controller/relay-text.go
  2. 12 0
      model/cache.go

+ 4 - 0
controller/relay-text.go

@@ -201,6 +201,10 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
 			if err != nil {
 				common.SysError("error consuming token remain quota: " + err.Error())
 			}
+			err = model.CacheUpdateUserQuota(userId)
+			if err != nil {
+				common.SysError("error update user quota cache: " + err.Error())
+			}
 			if quota != 0 {
 				tokenName := c.GetString("token_name")
 				logContent := fmt.Sprintf("模型倍率 %.2f,分组倍率 %.2f", modelRatio, groupRatio)

+ 12 - 0
model/cache.go

@@ -83,6 +83,18 @@ func CacheGetUserQuota(id int) (quota int, err error) {
 	return quota, err
 }
 
+func CacheUpdateUserQuota(id int) error {
+	if !common.RedisEnabled {
+		return nil
+	}
+	quota, err := GetUserQuota(id)
+	if err != nil {
+		return err
+	}
+	err = common.RedisSet(fmt.Sprintf("user_quota:%d", id), fmt.Sprintf("%d", quota), UserId2QuotaCacheSeconds*time.Second)
+	return err
+}
+
 func CacheIsUserEnabled(userId int) bool {
 	if !common.RedisEnabled {
 		return IsUserEnabled(userId)