Merge pull request #1240 from RedwindA/fix/redis

Fix: optimize Redis expiration handling and refactor cache duration retrieval
This commit is contained in:
Calcium-Ion
2025-06-17 14:47:00 +08:00
committed by GitHub
4 changed files with 11 additions and 9 deletions

View File

@@ -141,7 +141,11 @@ func RedisHSetObj(key string, obj interface{}, expiration time.Duration) error {
txn := RDB.TxPipeline() txn := RDB.TxPipeline()
txn.HSet(ctx, key, data) txn.HSet(ctx, key, data)
txn.Expire(ctx, key, expiration)
// 只有在 expiration 大于 0 时才设置过期时间
if expiration > 0 {
txn.Expire(ctx, key, expiration)
}
_, err := txn.Exec(ctx) _, err := txn.Exec(ctx)
if err != nil { if err != nil {

View File

@@ -2,12 +2,10 @@ package constant
import "one-api/common" import "one-api/common"
var ( // 使用函数来避免初始化顺序带来的赋值问题
TokenCacheSeconds = common.SyncFrequency func RedisKeyCacheSeconds() int {
UserId2GroupCacheSeconds = common.SyncFrequency return common.SyncFrequency
UserId2QuotaCacheSeconds = common.SyncFrequency }
UserId2StatusCacheSeconds = common.SyncFrequency
)
// Cache keys // Cache keys
const ( const (

View File

@@ -10,7 +10,7 @@ import (
func cacheSetToken(token Token) error { func cacheSetToken(token Token) error {
key := common.GenerateHMAC(token.Key) key := common.GenerateHMAC(token.Key)
token.Clean() token.Clean()
err := common.RedisHSetObj(fmt.Sprintf("token:%s", key), &token, time.Duration(constant.TokenCacheSeconds)*time.Second) err := common.RedisHSetObj(fmt.Sprintf("token:%s", key), &token, time.Duration(constant.RedisKeyCacheSeconds())*time.Second)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -70,7 +70,7 @@ func updateUserCache(user User) error {
return common.RedisHSetObj( return common.RedisHSetObj(
getUserCacheKey(user.Id), getUserCacheKey(user.Id),
user.ToBaseUser(), user.ToBaseUser(),
time.Duration(constant.UserId2QuotaCacheSeconds)*time.Second, time.Duration(constant.RedisKeyCacheSeconds())*time.Second,
) )
} }