Java简单使用redis-zset实现排行榜
时间:2021-09-08 09:27:35|栏目:JAVA代码|点击: 次
简单使用redis-zset实现排行榜
此方法实现一个根据某字段的查询次数进行排行,查询的次数越多排行越前(从大到小排序),适用于初学者
1.添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.注入RedisTemplate方法
@Autowired public RedisTemplate redisTemplate;
3.创建对象,用来接收redis数据
@Data
public class RangeVo implements Serializable {
private String shopName;
private Double shopPrice;
}
4.添加十条redis数据
@Test
public void getzset4(){
String keyModel = "testList";
for (int i = 0; i < 10 ; i++) {
int score = new Random().nextInt(50);
String ss = "shop"+i;
redisTemplate.opsForZSet().add(keyModel,ss,score);
}
}
5.根据某个key查询并每次查询score都会加1
@Test
public void setOneValue(){
String keyModel = "testList";
String ss = "shop8";
Double aDouble = redisTemplate.opsForZSet().incrementScore(keyModel, ss, 1);
System.out.println(aDouble);
}
6.查询redis中所有数据,zset会根据score自动排序
@Test
public void getList(){
String key = "testList";
List<RangeVo> list = new ArrayList<>();
/** 从小到大排序 返回value 和 score* 参数注释 key 为有序集合的key,1,50 是分数范围 1-50,0 是偏移量即从哪条数据开始排序, 5是取5条满足条件的数据*/
Set<ZSetOperations.TypedTuple<Object>> set = redisTemplate.opsForZSet().rangeByScoreWithScores(key,1,50,0,5);
Iterator<ZSetOperations.TypedTuple<Object>> iterator = set.iterator();
while (iterator.hasNext()){
ZSetOperations.TypedTuple<Object> next = iterator.next();
RangeVo rangeVo = new RangeVo();
rangeVo.setShopName((String) next.getValue());
rangeVo.setShopPrice(next.getScore());
list.add(rangeVo);
}
System.out.println(list);
}


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




