commit
This commit is contained in:
125
go_backend/utils/cache.go
Normal file
125
go_backend/utils/cache.go
Normal file
@@ -0,0 +1,125 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"ai_xhs/database"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
// SetCache 设置缓存
|
||||
func SetCache(ctx context.Context, key string, value interface{}, expiration time.Duration) error {
|
||||
data, err := json.Marshal(value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return database.RDB.Set(ctx, key, data, expiration).Err()
|
||||
}
|
||||
|
||||
// GetCache 获取缓存
|
||||
func GetCache(ctx context.Context, key string, dest interface{}) error {
|
||||
data, err := database.RDB.Get(ctx, key).Bytes()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return json.Unmarshal(data, dest)
|
||||
}
|
||||
|
||||
// DelCache 删除缓存
|
||||
func DelCache(ctx context.Context, keys ...string) error {
|
||||
return database.RDB.Del(ctx, keys...).Err()
|
||||
}
|
||||
|
||||
// ExistsCache 检查缓存是否存在
|
||||
func ExistsCache(ctx context.Context, key string) (bool, error) {
|
||||
count, err := database.RDB.Exists(ctx, key).Result()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return count > 0, nil
|
||||
}
|
||||
|
||||
// ExpireCache 设置缓存过期时间
|
||||
func ExpireCache(ctx context.Context, key string, expiration time.Duration) error {
|
||||
return database.RDB.Expire(ctx, key, expiration).Err()
|
||||
}
|
||||
|
||||
// GetTTL 获取缓存剩余生存时间
|
||||
func GetTTL(ctx context.Context, key string) (time.Duration, error) {
|
||||
return database.RDB.TTL(ctx, key).Result()
|
||||
}
|
||||
|
||||
// IncrCache 递增计数器
|
||||
func IncrCache(ctx context.Context, key string) (int64, error) {
|
||||
return database.RDB.Incr(ctx, key).Result()
|
||||
}
|
||||
|
||||
// DecrCache 递减计数器
|
||||
func DecrCache(ctx context.Context, key string) (int64, error) {
|
||||
return database.RDB.Decr(ctx, key).Result()
|
||||
}
|
||||
|
||||
// SetCacheNX 设置缓存(仅当key不存在时)
|
||||
func SetCacheNX(ctx context.Context, key string, value interface{}, expiration time.Duration) (bool, error) {
|
||||
data, err := json.Marshal(value)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return database.RDB.SetNX(ctx, key, data, expiration).Result()
|
||||
}
|
||||
|
||||
// HSetCache 设置哈希字段
|
||||
func HSetCache(ctx context.Context, key, field string, value interface{}) error {
|
||||
return database.RDB.HSet(ctx, key, field, value).Err()
|
||||
}
|
||||
|
||||
// HGetCache 获取哈希字段
|
||||
func HGetCache(ctx context.Context, key, field string) (string, error) {
|
||||
return database.RDB.HGet(ctx, key, field).Result()
|
||||
}
|
||||
|
||||
// HGetAllCache 获取哈希所有字段
|
||||
func HGetAllCache(ctx context.Context, key string) (map[string]string, error) {
|
||||
return database.RDB.HGetAll(ctx, key).Result()
|
||||
}
|
||||
|
||||
// HDelCache 删除哈希字段
|
||||
func HDelCache(ctx context.Context, key string, fields ...string) error {
|
||||
return database.RDB.HDel(ctx, key, fields...).Err()
|
||||
}
|
||||
|
||||
// SAddCache 添加集合成员
|
||||
func SAddCache(ctx context.Context, key string, members ...interface{}) error {
|
||||
return database.RDB.SAdd(ctx, key, members...).Err()
|
||||
}
|
||||
|
||||
// SMembersCache 获取集合所有成员
|
||||
func SMembersCache(ctx context.Context, key string) ([]string, error) {
|
||||
return database.RDB.SMembers(ctx, key).Result()
|
||||
}
|
||||
|
||||
// SRemCache 删除集合成员
|
||||
func SRemCache(ctx context.Context, key string, members ...interface{}) error {
|
||||
return database.RDB.SRem(ctx, key, members...).Err()
|
||||
}
|
||||
|
||||
// ZAddCache 添加有序集合成员
|
||||
func ZAddCache(ctx context.Context, key string, score float64, member interface{}) error {
|
||||
z := redis.Z{
|
||||
Score: score,
|
||||
Member: member,
|
||||
}
|
||||
return database.RDB.ZAdd(ctx, key, z).Err()
|
||||
}
|
||||
|
||||
// ZRangeCache 获取有序集合指定范围成员
|
||||
func ZRangeCache(ctx context.Context, key string, start, stop int64) ([]string, error) {
|
||||
return database.RDB.ZRange(ctx, key, start, stop).Result()
|
||||
}
|
||||
|
||||
// ZRemCache 删除有序集合成员
|
||||
func ZRemCache(ctx context.Context, key string, members ...interface{}) error {
|
||||
return database.RDB.ZRem(ctx, key, members...).Err()
|
||||
}
|
||||
Reference in New Issue
Block a user