包含Go API项目的所有源代码、配置文件、Docker配置、文档和前端资源 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package model
|
||
|
||
import (
|
||
"fmt"
|
||
"one-api/common"
|
||
"one-api/constant"
|
||
"time"
|
||
)
|
||
|
||
func cacheSetToken(token Token) error {
|
||
key := common.GenerateHMAC(token.Key)
|
||
token.Clean()
|
||
err := common.RedisHSetObj(fmt.Sprintf("token:%s", key), &token, time.Duration(common.RedisKeyCacheSeconds())*time.Second)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func cacheDeleteToken(key string) error {
|
||
key = common.GenerateHMAC(key)
|
||
err := common.RedisDelKey(fmt.Sprintf("token:%s", key))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func cacheIncrTokenQuota(key string, increment int64) error {
|
||
key = common.GenerateHMAC(key)
|
||
err := common.RedisHIncrBy(fmt.Sprintf("token:%s", key), constant.TokenFiledRemainQuota, increment)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func cacheDecrTokenQuota(key string, decrement int64) error {
|
||
return cacheIncrTokenQuota(key, -decrement)
|
||
}
|
||
|
||
func cacheSetTokenField(key string, field string, value string) error {
|
||
key = common.GenerateHMAC(key)
|
||
err := common.RedisHSetField(fmt.Sprintf("token:%s", key), field, value)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// CacheGetTokenByKey 从缓存中获取 token,如果缓存中不存在,则从数据库中获取
|
||
func cacheGetTokenByKey(key string) (*Token, error) {
|
||
hmacKey := common.GenerateHMAC(key)
|
||
if !common.RedisEnabled {
|
||
return nil, fmt.Errorf("redis is not enabled")
|
||
}
|
||
var token Token
|
||
err := common.RedisHGetObj(fmt.Sprintf("token:%s", hmacKey), &token)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
token.Key = key
|
||
return &token, nil
|
||
}
|