From 2a995a5da227a1c0b4060dc523ae80d59b08cfdc Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Sun, 7 Jan 2024 22:07:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=B4=A2=E5=BC=95=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E9=95=BF=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/usedata.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/model/usedata.go b/model/usedata.go index 9788512..d34954a 100644 --- a/model/usedata.go +++ b/model/usedata.go @@ -3,6 +3,7 @@ package model import ( "fmt" "one-api/common" + "sync" "time" ) @@ -10,9 +11,9 @@ import ( type QuotaData struct { Id int `json:"id"` UserID int `json:"user_id" gorm:"index"` - Username string `json:"username" gorm:"index:index_quota_data_model_user_name,priority:2;default:''"` - ModelName string `json:"model_name" gorm:"index;index:index_quota_data_model_user_name,priority:1;default:''"` - CreatedAt int64 `json:"created_at" gorm:"bigint;index:index_quota_data_created_at,priority:2"` + Username string `json:"username" gorm:"index:idx_qdt_model_user_name,priority:2;default:''"` + ModelName string `json:"model_name" gorm:"index;index:idx_qdt_model_user_name,priority:1;default:''"` + CreatedAt int64 `json:"created_at" gorm:"bigint;index:idx_qdt_created_at,priority:2"` Count int `json:"count" gorm:"default:0"` Quota int `json:"quota" gorm:"default:0"` } @@ -34,6 +35,7 @@ func UpdateQuotaData() { } var CacheQuotaData = make(map[string]*QuotaData) +var CacheQuotaDataLock = sync.Mutex{} func LogQuotaDataCache(userId int, username string, modelName string, quota int, createdAt int64) { // 只精确到小时 @@ -57,10 +59,15 @@ func LogQuotaDataCache(userId int, username string, modelName string, quota int, } func LogQuotaData(userId int, username string, modelName string, quota int, createdAt int64) { + CacheQuotaDataLock.Lock() + defer CacheQuotaDataLock.Unlock() LogQuotaDataCache(userId, username, modelName, quota, createdAt) } func SaveQuotaDataCache() { + CacheQuotaDataLock.Lock() + defer CacheQuotaDataLock.Unlock() + size := len(CacheQuotaData) // 如果缓存中有数据,就保存到数据库中 // 1. 先查询数据库中是否有数据 // 2. 如果有数据,就更新数据 @@ -78,6 +85,7 @@ func SaveQuotaDataCache() { } } CacheQuotaData = make(map[string]*QuotaData) + common.SysLog(fmt.Sprintf("保存数据看板数据成功,共保存%d条数据", size)) } func GetQuotaDataByUsername(username string, startTime int64, endTime int64) (quotaData []*QuotaData, err error) {