resources 下的application.yml
#集群版
spring:
redis:
cluster:
nodes:
#list
- 192.168.132.139:8001
- 192.168.132.139:8002
- 192.168.132.139:8003
- 192.168.132.139:8004
- 192.168.132.139:8005
- 192.168.132.139:8006
lettuce:
pool:
max-active: 30
Vo
heroVo:
package com.etoak.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class HeroVo {
//英雄名称
private String hero;
//武力值
private Double power;
}
server:
package com.etoak.service;
import com.etoak.vo.HeroVo;
import java.util.List;
public interface RankService {
/**
* 添加英雄
* @param key
* @param hero
* @param power
*/
void addHero(String key, String hero, double power);
/**
* 根据索引获取英雄排行
* @param key
* @param start
* @param end
* @return
*/
List<HeroVo> getByIndex(String key,int start,int end);
/*根据武力值获得英雄*/
List<HeroVo> getByPower(String key, double min,double max);
}
impl:
package com.etoak.service.impl;
import com.etoak.service.RankService;
import com.etoak.vo.HeroVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class RankServiceImpl implements RankService {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Override
public void addHero(String key, String hero, double power) {
stringRedisTemplate.opsForZSet().add(key, hero, power);
}
@Override
public List<HeroVo> getByIndex(String key, int start, int end) {
//zset命令:
Set<ZSetOperations.TypedTuple<String>> typedTuples = stringRedisTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
List<HeroVo> resultList = new ArrayList<>();
typedTuples.forEach(x ->{
resultList.add(new HeroVo(x.getValue(),x.getScore()));
});
return resultList;
}
@Override
public List<HeroVo> getByPower(String key, double min, double max) {
//zset:命令
return stringRedisTemplate.opsForZSet()
.reverseRangeByScoreWithScores(key, min, max)
.stream()
.map(x->{
return new HeroVo(x.getValue(),x.getScore());
}).collect(Collectors.toList());
}
}
controller:
package com.etoak.controller;
import com.etoak.service.RankService;
import com.etoak.vo.HeroVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Random;
@RestController
@RequestMapping("/rank")
public class RankController {
@Autowired
RankService rankService;
public static final String KEY="rank:hero";
private Random random = new Random();
/*添加 */
@RequestMapping("/{hero}")
public String addHero(@PathVariable String hero) {
int power = random.nextInt(1001);
rankService.addHero(KEY,hero,power);
return "success";
}
//
@RequestMapping("/index/{start}/{end}")
public List<HeroVo> getByIndex(@PathVariable int start,@PathVariable int end) {
return rankService.getByIndex(KEY,start,end);
}
//根据武力值得到
@RequestMapping("/power/{min}/{max}")
public List<HeroVo> getByPower(@PathVariable double min,@PathVariable double max) {
return rankService.getByPower(KEY,min,max);
}
}