[手游项目3]-8-排行榜redis实现

// 获取排行榜
func GetRankData(lsid int32, num int32) []redis.Z {
	datas, err := GetServerRedis(lsid).ZRevRangeWithScores(RedisKeyServerKickFight(lsid), int64(0), int64(num-1)).Result()
	if err != nil {
		antnet.LogError("kickFight GetOpponents error:%v", err)
	} else {
		return datas
	}
	return []redis.Z{}
}
 
// 排行榜
func HandleKickFightRankC2S(gamer *ControlGamer, msgque antnet.IMsgQue, msg *antnet.Message) bool {
	s2c := &pb.GamerKickFightRankS2C{}
	ranks := GetRankData(GetLsid(gamer.Id), Config.Doc.KickingConf[21].GetValue())
	index := int32(0)
	for _, v := range ranks {
		index++
		id := antnet.Atoi64(v.Member.(string))
		score := int32(int64(v.Score) / Additional)
 
		if id > 4000 {
			s2c.Rank = append(s2c.Rank, buildKickFightRankGamer(id, index, score))
		} else {
			s2c.Rank = append(s2c.Rank, buildKickFightRankRobot(gamer, id, index, score))
		}
	}
	msgque.Send(antnet.NewDataMsg(antnet.PbData(s2c)).CopyTag(msg))
	return true
}

// 获取排名
func (r *modelGamerKickFight) GetOpponentRank() int32 {
	lsid := GetLsid(r.gid)
	rank, err := GetServerRedis(lsid).ZRevRank(RedisKeyServerKickFight(lsid), antnet.Itoa(r.OpponentId)).Result()
	if err != nil {
		return 0
	}
	return int32(rank) + 1
}

func InitKickFightRobotRank(lsid int32) bool {
	// 初始该区的排行榜
	sep := 0
	key := RedisKeyServerKickFight(lsid)
	pipe := GetServerRedis(lsid).Pipeline()
	for _, v := range Config.Doc.KickingRobotConf {
		z := redis.Z{Member: int64(v.GetGuid()), Score: float64(int64(v.GetCredit())*Additional + additionalTime())}
		pipe.ZAdd(key, z)

		sep++
		if sep >= 100 {
			sep = 0
			_, err := pipe.Exec()
			if err != nil {
				antnet.LogError("InitKickFightRobotRank 1 db err:%v", err)
				return false
			}
			pipe = GetServerRedis(lsid).Pipeline()
		}
	}
	//删除临时数据
	_, err := GetServerRedis(lsid).ZRem(key, "test").Result()
	if err != nil {
		antnet.LogError("InitKickFightRobotRank 2 db err:%v", err)
		return false
	}
	antnet.LogInfo("InitKickFightRobotRank server:%v ok", lsid)
	return true
}

 

http://www.runoob.com/redis/sorted-sets-zrevrank.html

http://www.runoob.com/redis/sorted-sets-zadd.html

http://www.redis.cn/commands/zrevrangebyscore.html

http://www.runoob.com/redis/sorted-sets-zrevrank.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值