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-实现排行榜相关推荐

  1. redis mysql排行榜实现_redis实现排行榜

    1 前言 实现一个排版榜,我们通常想到的就是mysql的order by 简单粗暴就撸出来了.但是这样真的优雅吗? 数据库是系统的瓶颈,这是众所周知的.如果给你一张百万的表,让你排序做排行榜,花费的时 ...

  2. SpringBoot集成Redis实现排行榜

    SpringBoot继承Redis实现排行榜 项目文件结构 1.修改maven文件 <?xml version="1.0" encoding="UTF-8" ...

  3. 手把手教你使用 Java 和 Redis 实现排行榜!

    编辑:业余草 来源:https://www.xttblog.com/?p=4937 前言 排行榜作为互联网应用中几乎必不可少的一个元素,其能够勾起人类自身对比的欲望,从而来增加商品的销量.排行榜的实现 ...

  4. php TP5 redis 实现排行榜功能 (日榜 周榜 月榜)

    php 结合tp5框架进行redis开发排行榜功能 下面附上我自己封装的redis类:数据持久化我目前是这么想的:同步存:然后定时检测是否过期,或者是否存在在去读数据遍历重新存储 <?php n ...

  5. 【Redis】Redis实现排行榜及相同积分按时间排序

    在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般会选择redis的有 ...

  6. 基于Redis的排行榜设计和实现

    基于redis的排行榜设计和实现 一.场景介绍 二.案例设计 1.有序集合命令语法 2.终端测试 1). 添加成绩记录 2).第一次top3查询 3).更新分数 4).再次top-3查询 三.代码示例 ...

  7. 【Redis最佳实践】使用DCS Redis实现排行榜功能

    本节基于华为云DCS Redis实践所编写,用于指导您在以下场景使用DCS Redis实现排行榜功能. 目录 场景介绍 代码示例 实践指导 运行结果 华为云DCS Redis介绍 场景介绍 在网页和A ...

  8. Redis实现排行榜、延迟队列、LRU、消息已读未读(Redisson客户端实现)

    目录 序言 Redis客户端选型 Redis配置 Redis实现排行榜 Redis实现延迟队列 Redis LRU(Least Recently Used)使用 Redis实现消息已读未读 总结 序言 ...

  9. Redis实现排行榜设计

    Redis实现排行榜设计 redis的zset结构有着天然的排序功能,十分适合并发量大的排行功能.通过key值确定排行榜的范围,使用members来作为排序的标识,score作为排序的依据.redis ...

  10. redis实战之使用redis实现排行榜

    转载:http://blog.csdn.net/u011250882/article/details/48632379 设想在一个游戏中,有上百万的玩家数据,如果现在需要你根据玩家的经验值整理一个前2 ...

最新文章

  1. 难兄难弟!华为发话:绝不挖中兴的人,不管多优秀都不考虑!
  2. 以array开头的php函数,PHP函数、数组
  3. NYOJ 99 单词拼接
  4. boost::log::expressions::has_attr用法的测试程序
  5. 多数公司容易犯的5个大数据错误
  6. Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...
  7. 【数据结构基础应用】【查找和排序算法】
  8. [js] flash如何与js交互?
  9. oracle unused 语法_Oracle教程之设置为unused 后如何恢复 ?
  10. lduan SCVMM 2012 库服务器(五)
  11. 江苏实时分析评价系统项目总结报告
  12. (转)Django ==== 实战学习篇二 需求分析及设计,创建第一个模型---购物车的应用...
  13. java web 机试_java web 机试
  14. bootstrap modal 关闭时右侧滚动条消失,页面左移的解决方法
  15. rufus设置linux分区,rufus使用教程【处理方案】
  16. mysql配置文件中bind_bind配置语法详解 | 羽飞博客
  17. CSDN里的文章去广告、打印成PDF__小胡亲测
  18. jenkins 使用报ERROR: svn: E155010: The node ‘/aaa/bbb/ccc/ddd‘ was not found.
  19. c语言汉诺塔课设计报告,汉诺塔游戏的设计
  20. android 路由器,无线路由器上跑Android怎么样?

热门文章

  1. Java基础知识强化54:经典排序之插入排序(InsertSort)
  2. asp.net membership 配置错误
  3. 美国当地时间4月17日中国概念股收盘行情
  4. Visual Studio Code 调试 React Native (RN) 步骤 Mac版
  5. 数据挖掘十大算法-决策树的实现
  6. mybatis 中collection中需要 open close separator
  7. Python+selenium自动化测试环境安装
  8. SQLServer性能优化专题
  9. chrome最强大的浏览器插件推荐,只要你会用其他的插件你可以删除了
  10. Algorithm -- 字母重排