redis使用zset实现排行榜功能(取前5位/倒数5位)

本文介绍了如何在Spring Boot项目中使用Redis实现积分和战斗力排行榜,并通过Fastjson将排名结果转换为JSON格式。测试代码展示了如何随机生成10条数据并获取前5和倒数5名用户及其分数。
摘要由CSDN通过智能技术生成

package com.lezu.springboot.test.redis;

import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.LinkedHashMap;
import java.util.Set;

/**
 * redis排行榜功能实现(取前5位/倒数5位)
 *
 * @author LianJiaYu
 * @date 2022/6/22 16:02
 */
@SpringBootTest
public class RankingList {
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    public void test1() {
        //fastjson是由hashMap组成的,所以内容存放的顺序并不是有序的
        JSONObject data = new JSONObject(new LinkedHashMap<>());
        //积分排行榜
        String rankingList = "ranking_list:integral";
//        //战斗力排行榜
//        String combat = "ranking_list:combat";
        //随机生成10个4位数
        for (int i = 0; i < 10; i++) {
            String score = RandomUtil.randomNumbers(4);
            redisTemplate.opsForZSet().add(rankingList, "user_id" + i, Integer.parseInt(score));
        }
        //获取前5名的value
        Set<String> reverseRange = redisTemplate.opsForZSet().reverseRange(rankingList, 0, 4);
        //获取倒数5名的value
//      Set<String> range = redisTemplate.opsForZSet().range(rankingList, 0, 4);
        reverseRange.forEach(v -> {
            //根据rankingList+value获取score
            Double score = redisTemplate.opsForZSet().score(rankingList, v);
            //value和score放入JSON中
            data.put(v, score);
        });
        System.out.println(data);
    }
}

随机生成4位数插入10条数据 

 

 运行结果

 StringRedisTemplate手册参考

springboot2.X手册:redis的7种类型100个方法全解析 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值