package models import ( "encoding/json" "pkg/utils" "dario.cat/mergo" "github.com/redis/go-redis/v9" ) // 统计数据结构 type StatData struct { FileSize int64 `json:"file_size"` // 文件大小 FileNum int64 `json:"file_num"` // 文件数量 ShareNum int64 `json:"share_num"` // 分享数量 DownloadNum int64 `json:"download_num"` // 下载数量 } func GetRedisStat(key string) (*StatData, error) { rdb, ctx := utils.GetRedisClient() statUnmarshalData, err := rdb.HGet(ctx, "015:stat", key).Result() if err == redis.Nil { return nil, nil } if err != nil { return nil, err } var stat StatData if err := json.Unmarshal([]byte(statUnmarshalData), &stat); err != nil { return nil, err } return &stat, nil } func SetRedisStat(key string, stat StatData) error { rdb, ctx := utils.GetRedisClient() old_stat, err := GetRedisStat(key) if err != nil { return err } if old_stat != nil { mergo.Merge(&stat, old_stat) } jsonData, _ := json.Marshal(stat) _, err = rdb.HSet(ctx, "015:stat", key, string(jsonData)).Result() return err } func GetRedisStatAll() (map[string]string, error) { rdb, ctx := utils.GetRedisClient() return rdb.HGetAll(ctx, "015:stat").Result() }