redis-实现排行榜
2019独角兽企业重金招聘Python工程师标准>>>
使用redis的有序集合zset实现排行榜功能,步骤有:
1、下载jedis-2.7.2.jar
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.2</version><type>jar</type><scope>compile</scope>
</dependency>
2、下载jackson所需的jar包
使用jackson实现数据的序列化和反序列化
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.5.4</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.4</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.5.4</version>
</dependency>
3、初始化JedisPool对象,并通过JedisPool创建Jedis对象
public class JedisHandler {private static JedisPool jedisPool = null;static {JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(8); // maximum active connectionspoolConfig.setMaxIdle(100); // maximum idle connectionsjedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);}public static Jedis createJedis() {return jedisPool.getResource();}
}
4、创建数据模型对象
public class User {private String id;private String userName;private Integer gender;private String redisterDate;private Double score;/** 排名 */private Integer rank;.........
}
5、通过jedis添加模拟数据
public static void setData() {Jedis jedis = JedisHandler.createJedis();User user = new User("100", "汤姆", 1, "2012-10-20");jedis.zadd("user:score", 1000d, MarshalJSONUtil.marshalBeanToJson(user));user = new User("101", "韩梅梅", 2, "2013-03-10");jedis.zadd("user:score", 873.3, MarshalJSONUtil.marshalBeanToJson(user));user = new User("102", "Jack", 1, "2008-11-10");jedis.zadd("user:score", 1302.6d, MarshalJSONUtil.marshalBeanToJson(user));user = new User("103", "Rose", 2, "2015-02-03");jedis.zadd("user:score", 200d, MarshalJSONUtil.marshalBeanToJson(user));user = new User("104", "李雷", 1, "2014-01-26");jedis.zadd("user:info", 534.73d, MarshalJSONUtil.marshalBeanToJson(user));Random random = new Random();for(int i = 1; i < 101; i++) {int index = 104 + i;user = new User(index + "", "用户" + index, random.nextInt(1) + 1, "2015-01-26");jedis.zadd("user:score", 100d + 1, MarshalJSONUtil.marshalBeanToJson(user));}jedis.close();
}
6、通过jedis排序,筛选数据
/*** 获取降序排列的数据* @return 排名后的用户集合
*/
public static List<User> getRevRankData(int count) {Jedis jedis = JedisHandler.createJedis();List<User> list = new ArrayList<User>();try {Set<Tuple> set = jedis.zrevrangeWithScores("user:score", 0, count);Iterator<Tuple> iterator = set.iterator();int rank = 1;while(iterator.hasNext()) {Tuple tuple = iterator.next();String userInfo = tuple.getElement();User user = MarshalJSONUtil.marshalToBean(userInfo, User.class);user.setScore(tuple.getScore());user.setRank(rank++);list.add(user);}} catch(Exception e) {e.printStackTrace();} finally {jedis.close();}return list;
}
7、创建处理请求的Servlet
public class RankServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String type = request.getParameter("type");String countStr = request.getParameter("count");int count = (countStr == null || "".equals(countStr)) ? -1 : Integer.parseInt(countStr);List<User> list = null;if("asc".equalsIgnoreCase(type)) {list = RankUtil.getRankData(count);} else {list = RankUtil.getRevRankData(count);}request.setAttribute("list", list);request.getRequestDispatcher("/rank.jsp").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
转载于:https://my.oschina.net/u/732520/blog/541051
redis-实现排行榜相关推荐
- redis mysql排行榜实现_redis实现排行榜
1 前言 实现一个排版榜,我们通常想到的就是mysql的order by 简单粗暴就撸出来了.但是这样真的优雅吗? 数据库是系统的瓶颈,这是众所周知的.如果给你一张百万的表,让你排序做排行榜,花费的时 ...
- SpringBoot集成Redis实现排行榜
SpringBoot继承Redis实现排行榜 项目文件结构 1.修改maven文件 <?xml version="1.0" encoding="UTF-8" ...
- 手把手教你使用 Java 和 Redis 实现排行榜!
编辑:业余草 来源:https://www.xttblog.com/?p=4937 前言 排行榜作为互联网应用中几乎必不可少的一个元素,其能够勾起人类自身对比的欲望,从而来增加商品的销量.排行榜的实现 ...
- php TP5 redis 实现排行榜功能 (日榜 周榜 月榜)
php 结合tp5框架进行redis开发排行榜功能 下面附上我自己封装的redis类:数据持久化我目前是这么想的:同步存:然后定时检测是否过期,或者是否存在在去读数据遍历重新存储 <?php n ...
- 【Redis】Redis实现排行榜及相同积分按时间排序
在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般会选择redis的有 ...
- 基于Redis的排行榜设计和实现
基于redis的排行榜设计和实现 一.场景介绍 二.案例设计 1.有序集合命令语法 2.终端测试 1). 添加成绩记录 2).第一次top3查询 3).更新分数 4).再次top-3查询 三.代码示例 ...
- 【Redis最佳实践】使用DCS Redis实现排行榜功能
本节基于华为云DCS Redis实践所编写,用于指导您在以下场景使用DCS Redis实现排行榜功能. 目录 场景介绍 代码示例 实践指导 运行结果 华为云DCS Redis介绍 场景介绍 在网页和A ...
- Redis实现排行榜、延迟队列、LRU、消息已读未读(Redisson客户端实现)
目录 序言 Redis客户端选型 Redis配置 Redis实现排行榜 Redis实现延迟队列 Redis LRU(Least Recently Used)使用 Redis实现消息已读未读 总结 序言 ...
- Redis实现排行榜设计
Redis实现排行榜设计 redis的zset结构有着天然的排序功能,十分适合并发量大的排行功能.通过key值确定排行榜的范围,使用members来作为排序的标识,score作为排序的依据.redis ...
- redis实战之使用redis实现排行榜
转载:http://blog.csdn.net/u011250882/article/details/48632379 设想在一个游戏中,有上百万的玩家数据,如果现在需要你根据玩家的经验值整理一个前2 ...
最新文章
- 难兄难弟!华为发话:绝不挖中兴的人,不管多优秀都不考虑!
- 以array开头的php函数,PHP函数、数组
- NYOJ 99 单词拼接
- boost::log::expressions::has_attr用法的测试程序
- 多数公司容易犯的5个大数据错误
- Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...
- 【数据结构基础应用】【查找和排序算法】
- [js] flash如何与js交互?
- oracle unused 语法_Oracle教程之设置为unused 后如何恢复 ?
- lduan SCVMM 2012 库服务器(五)
- 江苏实时分析评价系统项目总结报告
- (转)Django ==== 实战学习篇二 需求分析及设计,创建第一个模型---购物车的应用...
- java web 机试_java web 机试
- bootstrap modal 关闭时右侧滚动条消失,页面左移的解决方法
- rufus设置linux分区,rufus使用教程【处理方案】
- mysql配置文件中bind_bind配置语法详解 | 羽飞博客
- CSDN里的文章去广告、打印成PDF__小胡亲测
- jenkins 使用报ERROR: svn: E155010: The node ‘/aaa/bbb/ccc/ddd‘ was not found.
- c语言汉诺塔课设计报告,汉诺塔游戏的设计
- android 路由器,无线路由器上跑Android怎么样?