Redis的Zset在排行榜中应用

1.在pom文件导入:

java 复制代码
 <!-- redis -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
            </dependency>

2.yml文件配置

java 复制代码
  redis:
    port: 6379
    host: localhost
    database: 5

3.代码:

java 复制代码
import java.util.Set;

@RestController
    @RequestMapping("/leaderboard")
    public class  testController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 增加玩家分数
     * @param player
     * @param score
     */
     @PostMapping("/add")
    public void addPlayerScore(String player, double score) {
        stringRedisTemplate.opsForZSet().add("playerRanking", player, score);
    }

    /**
     * 获取前N名玩家排名
     * @param topN
     * @return
     */
    @GetMapping("/top")
    public Set<ZSetOperations.TypedTuple<String>> getPlayerRanking(int topN) {
        return stringRedisTemplate.opsForZSet().reverseRangeWithScores("playerRanking", 0, topN - 1);
    }

    /**
     * 获取玩家排名
     * @param player
     * @return
     */
    @GetMapping("/rank")
    public Long getPlayerRank(String player) {
        return stringRedisTemplate.opsForZSet().reverseRank("playerRanking", player) + 1;
    }


    /**
     * 对应的加分操作
     */
    @GetMapping("/increment")
    public void incrementScore(String player,double socre){
        stringRedisTemplate.opsForZSet().incrementScore("playerRanking",player,socre);
    }
}

4.插入数据:

java 复制代码
@SpringBootTest
public class test {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void batchAddPlayers() {
        Random random = new Random();

        for (int i = 1; i <= 20; i++) {
            String player = "Player" + i; 
            double score = random.nextDouble() * 100; 
            stringRedisTemplate.opsForZSet().incrementScore("playerRanking",player,score);

        }
    }
}

5.结果:

!请添加图片描述(https://i-blog.csdnimg.cn/direct/ad2fa7880deb4f69a6754979711db20f.png


相关推荐
数字新视界22 分钟前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB44 分钟前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛1 小时前
MySQL的操作
数据库·mysql
猫咪很可爱1 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle
Song_RsHt2 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
小豆庄2 小时前
视频素材处理时的隐私盲区:云处理与本地处理的边界在哪
数据库·图像处理·视频·敏捷流程
Umi·2 小时前
MySQL库表操作
数据库·mysql
风哥2号3 小时前
数据库教程FGMT69:PostgreSQL运维诊断与监控分析
运维·数据库·postgresql
ss2733 小时前
AI时代首先数据库-PostgreSQL实战笔记 27 PostgreSQL数据写入与读取流程解析
数据库·笔记·postgresql
数字新视界3 小时前
信创机房动环监控技术在智能运维中的应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统