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


相关推荐
橙子圆1231 小时前
Redis知识6之事务
数据库·redis·缓存
不会摸鱼的小鱼1 小时前
WSL 安装 Ubuntu 22.04 到指定磁盘
数据库·postgresql·php
m0_702036531 小时前
mysql如何导出特定条件的查询数据_使用mysqldump加where参数
jvm·数据库·python
正在走向自律1 小时前
标量子查询消除:数据库优化器的一场“等价变戏法”
数据库·sql 优化·金仓数据库·数据库性能调优·标量子查询·数据库优化器
逻极1 小时前
SQLite 从入门到精通:深入理解嵌入式数据库的艺术与科学
数据库·sqlite·记忆·sqlite从入门到精通
未来之窗软件服务2 小时前
数据库优化(九)随机抽选系统数据表 ——东方仙盟
大数据·数据库·数据库优化·仙盟创梦ide·东方仙盟
爱喝水的鱼丶2 小时前
SAP-ABAP:新手入门篇——从0到1写出你的第一个ABAP Hello World程序并完成调试运行
运维·服务器·数据库·学习·sap·abap
m0_733565462 小时前
bootstrap怎么实现响应式的文章瀑布流布局
jvm·数据库·python
TE-茶叶蛋2 小时前
sql优化思维
数据库·sql
oradh2 小时前
Oracle物理存储结构概述
数据库·oracle·物理结构·oracle基础·oracle入门·oracle物理存储结构概述