现在的互联网应用基本都有排行榜这个功能,现在就用java + redis来实现一下吧。
先看一下效果:
引入依赖
redis.clients
jedis
2.7.3
开发思路
1.页面上点击一次购买按钮,则对该手机的销量加 1,同时将销售动态添加到队列当中
jedis.zincrby(Constants.SALES_LIST, 1, String.valueOf(phoneId));
jedis.lpush(Constants.BUY_DYNAMIC, msg);
2.获得排行榜
// 按照scope升序排名,取出前五
jedis.zrevrangeWithScores(Constants.SALES_LIST, 0, 4);
3.获得指定手机的排名情况
jedis.zrevrank(Constants.SALES_LIST, String.valueOf(phoneId));
4.获得销售动态,此处只取 3 条,同时队列只保存最新的 20 条动态
List dynamicList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
String result = jedis.lindex(Constants.BUY_DYNAMIC, i);
if (StringUtils.isEmpty(result)) {
break;
}
String[] arr = result.split(Constants.separator);
long time = Long.valueOf(arr[0]);
String phone = arr[1];
DynamicVO vo = new DynamicVO();
vo.setPhone(phone);
vo.setTime(StringUtil.showTime(new Date(time)));
dynamicList.add(vo);
}
jedis.ltrim(Constants.BUY_DYNAMIC, 0, 19);
源码分享