java基于Redis实现排行榜功能-附源码
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实现排行榜功能-附源码相关推荐
- java基于springboot二手车交易管理系统附源码
二手车交易管理系统是基于java编程语言,mysql数据库,springboot框架设计,本系统主要分为用户和管理员两个角色,其中用户的功能有用户注册和登陆系统,用户查网站新闻,查看二手车,在线预定, ...
- java基于springboot美食推荐管理系统附源码风格
美食推荐管理系统是基于java编程语言,springboot框架,mysql数据库开发,本系统主要分为用户和管理员两个角色,其中用户注册登陆后可以查看美食,教程,社区,资讯公告,收藏,评论:管理员对用 ...
- 高分毕设基于JAVA的仓库管理系统项目(内附源码)
一.高分毕设基于JAVA的仓库管理系统项目(内附源码) 项目简介:(源码免费下载链接如下) 基于JAVA的仓库管理系统项目源码.zip-Java文档类资源-CSDN下载 在经过多家公司上线运行后,为了 ...
- srs可以用java开发吗,为SRS流媒体服务器添加HLS加密功能(附源码)
#为SRS流媒体服务器添加HLS加密功能(附源码)# 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的 ...
- Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...
内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...
- arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...
内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...
- Java Swing图书管理系统桌面软件附源码
Java Swing图书管理系统桌面软件附源码,亲测可运行. 功能界面如下: 登录界面,默认账号admin密码admin 主功能界面: 添加图书功能界面: 部分源码: 完整源码下载地址: JavaSw ...
- 使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了
使用Java实现发送微信消息(附源码)_此程序在手再也不怕对象跟你闹了 此程序在手再也不怕女朋友跟你闹了!!!!自从有了女朋友比如:早安.晚安之类的问候语可不能断,但是也难免有时候会忘记那么该咋么办呢 ...
- VC++利用笔记本自带摄像头扫二维码功能(附源码demo)
VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第8章:VC++利用笔记本自带摄像头扫二维码功能(附源码demo) 源代码demo已上传到百度网盘:永久生效 ,代码实现了打开笔记本 ...
最新文章
- 微信小程序生成小程序二维码 php 直接可以用
- Android App压力测试(Monkey和ADB)
- 数据库经典书籍--SQL必知必会
- 利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符
- 重新定义“人货场”:淘宝情景计算探索实践
- RPi 2B python opencv camera demo example
- 邹建老大写的经典SQL
- python第一步怎么写_python第一步
- TreeSet-自然排序与比较器排序
- reverse() ; sort() ; sorted()
- 米思齐Mixly图形化编程---RFID智能门禁
- 关于ios的ipa包的分析之link map 文件的分析
- 计算机报名上传图片需要flash,公务员报名上传照片时需要的flash控件是什么
- 三维地理信息系统应用的关注要点
- PTA Python函数题 7-1 模拟乒乓球比赛 (20 分)
- 百度搜索引擎对站长越来越嚣张,已经放弃做什么百度优化咯
- 按键精灵电脑版对接百度ai,告别字库(文字识别篇)
- 可怕的大学,到底有多少人在校园里浪费青春
- 微信小程序:Do not set same key \5cef8733d2a18eed506c1165\ in wx:key.
- telnet 正在连接127.0.0.1:9123...无法打开到主机的连接。 在端口 23: 连接失败