通过redis实现排行榜功能+springboot的定时任务使用

本文介绍了一种使用Redis优化大型数据库查询性能的方法,特别是在处理排行榜功能时。通过利用Redis的Sorted Set特性,可以高效地进行数据排序和获取。此外,还讨论了如何设置SpringBoot定时任务来定期更新排行榜数据,确保数据实时性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司做了一个答题小程序,现在正在优化阶段,看一下还有什么地方可以修改一下,然后就看到了排行榜功能,之前的排行榜就是单纯的数据库多表联查,考虑到数据量大了以后这样查询非常影响msql性能,于是替换为redis实现:

在这里插入图片描述

Set<ZSetOperations.TypedTuple> sortByCategoryIdList = new HashSet<>();
这是用来装返回的数据的,
重点是TypedTuple对象
创建时指定用户K(用户对象,可指定任何类型)和V(分数,Double),redis通过这个score对数据进行排序.

需要注意的地方是: 通过redis取数据的时候当结果为null时他会创建对象
在这里插入图片描述
因此返回的集合长度为0时有两种情况
1.有数据但是从redis中没有读取到
2.本身就没有匹配的数据
例如redis被人执行了清空操作,此时数据库中是有数据的,但是此时从redis中是拿不到的,所以当返回结果长度为0时,需要从数据库在查询一次,如果返回结果依然为0,则代表本身没有匹配数据,返回暂无上榜即可.反之则将数据库查出来的数据返回,同时更新redis将数据同步.

关于定时任务:
排行榜固定5分钟刷新一次,定时任务直接使用springboot自带的即可, @Scheduled(fixedRate = 1000x60x5)
fixRate代表执行的间隔时间
Application启动类上需要添加@EnableScheduling 开启定时任务功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值