Redis积分排行榜设计与实现第二篇
前言
在上一篇,讨论了积分排行榜基于mysql的实现方案,并且在文章的末尾我们抛出了一个问题,就是当用户量越来越大的时候,性能的问题将会成为此功能的瓶颈,因此需要寻找更好的解决方案
在Redis中,提供了一个叫做SortedSet的数据结构,该数据结构有2个特性,有序性和数据的可压缩性,利用这2个特点,结合上篇分析到的积分排行的业务场景,下面来尝试下如何利用Redis的这种数据结构来实现topN的积分排行榜吧
实现思路
- 用户签到插入积分时,同时插入到zset中
- 获取topN的排行信息时候,直接从zset中取出用户的userId和points的列表信息
- 拿到上面的用户列表,查询数据库用户的完整信息返回给页面展示
1、数据准备
考虑到要将用户的积分信息同时插入到mysql和redis,t_user表数据不需动,t_order表重新初始化下数据,简单对单元测试做一下修改
/**
* 为30个用户随机增加积分
*/
@Test
public void testAddPoints(){
for(int i=1;i<=30;i++){
Random rd1 = new Random();
int timeCount = rd1.nextInt(10);;
for(int j=1;j<=timeCount;j++){
Random rd = new Random();
还没有评论,来说两句吧...