Redis积分排行榜设计与实现第二篇

系统管理员 2022-11-03 11:55 177阅读 0赞

前言

在上一篇,讨论了积分排行榜基于mysql的实现方案,并且在文章的末尾我们抛出了一个问题,就是当用户量越来越大的时候,性能的问题将会成为此功能的瓶颈,因此需要寻找更好的解决方案

在Redis中,提供了一个叫做SortedSet的数据结构,该数据结构有2个特性,有序性和数据的可压缩性,利用这2个特点,结合上篇分析到的积分排行的业务场景,下面来尝试下如何利用Redis的这种数据结构来实现topN的积分排行榜吧

实现思路

  • 用户签到插入积分时,同时插入到zset中
  • 获取topN的排行信息时候,直接从zset中取出用户的userId和points的列表信息
  • 拿到上面的用户列表,查询数据库用户的完整信息返回给页面展示

1、数据准备

考虑到要将用户的积分信息同时插入到mysql和redis,t_user表数据不需动,t_order表重新初始化下数据,简单对单元测试做一下修改

  1. /**
  2. * 为30个用户随机增加积分
  3. */
  4. @Test
  5. public void testAddPoints(){
  6. for(int i=1;i<=30;i++){
  7. Random rd1 = new Random();
  8. int timeCount = rd1.nextInt(10);;
  9. for(int j=1;j<=timeCount;j++){
  10. Random rd = new Random();

发表评论

表情:
评论列表 (有 0 条评论,177人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis排行榜实现

    根据上一篇的[设计][Link 1]进一步结合实际场景进行实现,通过伪代码的形式展开。现假设有以下场景: > 游戏闯关排行榜以通关次数正序、复活次数倒序和第一次通关的时间倒序

    相关 Redis实现排行榜功能

    在实际生活中,排行榜的例子随处可见,如考试成绩排名、商品销售排名、游戏等价或积分排名,以及热门文章或帖子的点赞数、访问量等相关的排名等。要实现一个排行榜功能,可以利用 Redi