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手册参考