xiabin ac005aa95d
Some checks failed
/ build-services (app/auth_service/Dockerfile, auth, auth) (push) Has been cancelled
/ build-services (app/ecpm_service/Dockerfile, ecpm, ecpm) (push) Has been cancelled
/ build-services (app/ranking_service/Dockerfile, ranking, ranking) (push) Has been cancelled
/ build-services (app/user_service/Dockerfile, user, user) (push) Has been cancelled
/ start-services (push) Has been cancelled
巅峰赛,合成西瓜总数
2025-02-17 16:44:44 +08:00

56 lines
1.6 KiB
Go

package rankings
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
)
// Ranking 排行榜结构体
type Ranking struct {
c *redis.Client
}
const EcpmRankingsListPrefix = "ecpm:rankings:"
// NewRanking 创建一个新的排行榜实例
func NewRanking(c *redis.Client) *Ranking {
return &Ranking{
c: c,
}
}
func GetRankingsCacheKey(appId uint32, t uint32) string {
return fmt.Sprintf("%sappId:%d:type:%d", EcpmRankingsListPrefix, appId, t)
}
// SetList 向排行榜中添加成员及其分数
func (r *Ranking) SetList(ctx context.Context, key string, data ...redis.Z) {
r.c.ZAdd(ctx, key, data...)
}
// GetList 获取排行榜,按照分数从高到低排序
func (r *Ranking) GetList(ctx context.Context, key string, start, stop int64) (data []redis.Z, err error) {
return r.c.ZRevRangeWithScores(ctx, key, start, stop).Result()
}
// GetRank 获取指定成员在排行榜中的排名(排名从 0 开始,分数越高排名越靠前)
func (r *Ranking) GetRank(ctx context.Context, key, member string) (rank int64, err error) {
return r.c.ZRevRank(ctx, key, member).Result()
}
// GetScore 获取指定成员在排行榜中的分数
func (r *Ranking) GetScore(ctx context.Context, key, member string) (score float64, err error) {
return r.c.ZScore(ctx, key, member).Result()
}
// IncrScore 增加分数
func (r *Ranking) IncrScore(ctx context.Context, key, member string, increment float64) (score float64, err error) {
return r.c.ZIncrBy(ctx, key, increment, member).Result()
}
// Remove 删除排行榜
func (r *Ranking) Remove(ctx context.Context, key string) (err error) {
return r.c.Del(ctx, key).Err()
}