java基于Redis Zset实现排行榜功能

  • 前言
    • 做之前要思考的问题?
    • Zset怎么存储需要的多个字段?
    • 话不多说先上效果图
    • 数据存储格式
    • 代码
    • 源码下载

闲暇之余,整理了一下之前利用Redis Zset数据类型实现的排行榜功能。

前言

排行榜功能之所以选用redis是因为,参加的用户数据量较大,有将近20万人,如果前100名排行从数据库中查的话也不是不可以,但相对于redis来说,还是不够看的,所以当时就把排行榜的功能做在了redis里。

做之前要思考的问题?

Redis数据类型那么多,到底用哪个数据类型呢?
我们可以根据需求特点来进行选型,首先排行榜是有序的,并且不能有重复的数据,根据这个特点,发现Zset这个数据类型符合我们的要求。

Zset怎么存储需要的多个字段?

Zset只可以存储value和score,需要用户的昵称和头像以及用户id和分数,这怎么存储啊。首先我们可以把排序值分数存储在score中,至于用户昵称,头像和用户id我们可以用分隔符分开一起存进value中。例如10002#王二#https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83erHB8aIib1R0B0iadpMmHRsyLF2loxLia7Mx3aZv9obHGgUJcl0ibBBys4QRZwAL0J5a81VRfU1jHBexg/132

Java 客户端开发包选用的是Jedis。

话不多说先上效果图


数据存储格式

前面说了,用户排行需要用户的昵称,头像,甚至还有可能需要用户id,所以我是这样存储的。

value里存了多个字段用#分割开,用的时候通过split()得到一个数组,就可以拿到这些数据啦,当然,你也可以存储为json格式等等。

代码

//ServiceImp层的 两个方法Jedis jedis = new Jedis("127.0.0.1", 6379);@Overridepublic List<UserScore> getUserScoreList() {// 按照用户分数多少排行,取出前五名Set<Tuple> tuples = jedis.zrevrangeWithScores("user-score", 0, 4);List<UserScore> list = new ArrayList<>();int ranking = 0;for (Tuple tuple : tuples) {UserScore us = new UserScore();String element = tuple.getElement();String[] arr = element.split("#");us.setScore((int) tuple.getScore());ranking++;us.setRanking(ranking);us.setName(arr[1]);us.setImg(arr[2]);list.add(us);}return list;}@Overridepublic Long insertUserScore(UserScore userScore) {String value = userScore.getUserid()+"#"+userScore.getName()+"#"+userScore.getImg();final Long zadd = jedis.zadd(Constants.USER_SCORE, userScore.getScore(), value);return zadd;}
//controller层的三个方法@RequestMapping("/")public ModelAndView home() {ModelAndView view = new ModelAndView("index");List<UserScore> rankingList = userService.getUserScoreList();view.addObject("rankingList", rankingList);return view;}@RequestMapping("/add")public ModelAndView add() {ModelAndView view = new ModelAndView("add");return view;}@RequestMapping("/addUserScore")public ModelAndView addUserScore(UserScore userScore) {ModelAndView view = new ModelAndView("index");Long zadd = userService.insertUserScore(userScore);if(zadd !=null && zadd!=0){List<UserScore> rankingList = userService.getUserScoreList();view.addObject("rankingList", rankingList);}return view;}

代码很简单,只是没有上过手的觉得会很麻烦。
如果这些代码还不能满足你的话,看源码吧。源码down下来之后跑一跑就知道怎么回事了。

源码下载

源码地址:https://download.csdn.net/download/nxw_tsp/25866908

源码下载后详情请看:README.MD

java基于Redis实现排行榜功能-附源码相关推荐

  1. java基于springboot二手车交易管理系统附源码

    二手车交易管理系统是基于java编程语言,mysql数据库,springboot框架设计,本系统主要分为用户和管理员两个角色,其中用户的功能有用户注册和登陆系统,用户查网站新闻,查看二手车,在线预定, ...

  2. java基于springboot美食推荐管理系统附源码风格

    美食推荐管理系统是基于java编程语言,springboot框架,mysql数据库开发,本系统主要分为用户和管理员两个角色,其中用户注册登陆后可以查看美食,教程,社区,资讯公告,收藏,评论:管理员对用 ...

  3. 高分毕设基于JAVA的仓库管理系统项目(内附源码)

    一.高分毕设基于JAVA的仓库管理系统项目(内附源码) 项目简介:(源码免费下载链接如下) 基于JAVA的仓库管理系统项目源码.zip-Java文档类资源-CSDN下载 在经过多家公司上线运行后,为了 ...

  4. srs可以用java开发吗,为SRS流媒体服务器添加HLS加密功能(附源码)

    #为SRS流媒体服务器添加HLS加密功能(附源码)# 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的 ...

  5. Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...

  6. arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...

  7. Java Swing图书管理系统桌面软件附源码

    Java Swing图书管理系统桌面软件附源码,亲测可运行. 功能界面如下: 登录界面,默认账号admin密码admin 主功能界面: 添加图书功能界面: 部分源码: 完整源码下载地址: JavaSw ...

  8. 使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了

    使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了 此程序在手再也不怕女朋友跟你闹了!!!!自从有了女朋友比如:早安.晚安之类的问候语可不能断,但是也难免有时候会忘记那么该咋么办呢 ...

  9. VC++利用笔记本自带摄像头扫二维码功能(附源码demo)

      VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第8章:VC++利用笔记本自带摄像头扫二维码功能(附源码demo) 源代码demo已上传到百度网盘:永久生效  ,代码实现了打开笔记本 ...

最新文章

  1. 微信小程序生成小程序二维码 php 直接可以用
  2. Android App压力测试(Monkey和ADB)
  3. 数据库经典书籍--SQL必知必会
  4. 利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符
  5. 重新定义“人货场”:淘宝情景计算探索实践
  6. RPi 2B python opencv camera demo example
  7. 邹建老大写的经典SQL
  8. python第一步怎么写_python第一步
  9. TreeSet-自然排序与比较器排序
  10. reverse() ; sort() ; sorted()
  11. 米思齐Mixly图形化编程---RFID智能门禁
  12. 关于ios的ipa包的分析之link map 文件的分析
  13. 计算机报名上传图片需要flash,公务员报名上传照片时需要的flash控件是什么
  14. 三维地理信息系统应用的关注要点
  15. PTA Python函数题 7-1 模拟乒乓球比赛 (20 分)
  16. 百度搜索引擎对站长越来越嚣张,已经放弃做什么百度优化咯
  17. 按键精灵电脑版对接百度ai,告别字库(文字识别篇)
  18. 可怕的大学,到底有多少人在校园里浪费青春
  19. 微信小程序:Do not set same key \5cef8733d2a18eed506c1165\ in wx:key.
  20. telnet 正在连接127.0.0.1:9123...无法打开到主机的连接。 在端口 23: 连接失败

热门文章

  1. Ubuntu自动登录到桌面设置
  2. 关于2022年7月30日上午PMI认证考试的报名通知
  3. zynq7000 三种方式 编译驱动
  4. 在html中加入文本框,在HTML中的文本框中添加多行
  5. 申宝证券-元宇宙概念掀起涨停潮
  6. bzoj2560串珠子(子集dp)
  7. 2018年终工作总结动态PPT模板
  8. 一网通办远程视频踏勘建设方案
  9. 拥有这八款设计软件,足够
  10. 计算机登录用户名开机取消,电脑开机有两个用户名登录,怎样取消一个?