1.业务层
- 方法1:实现InitializingBean接口
/**
* 初始化数据
*/
@Override
public void afterPropertiesSet() throws Exception {
this.initData();
}
private void initData() {
List<UserScore> list = userScoreMapper.selectList();
list.forEach(i -> {
ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
zset.add("rankService:score:", i.getUserId(), i.getUserScore());
});
}
- 方法2:实现ApplicationRunner接口
/**
* 初始化数据
*/
@Override
public void run(ApplicationArguments args) throws Exception {
this.initData();
}
区别:
- InitializingBean:加载完成才会对外服务。
- ApplicationRunner:启动后才会加载数据,即先对外服务,再加载数据。
2.测试代码
Controller
@GetMapping("/listRank/{start}/{end}")
public List<Map<String, Object>> listRank(@PathVariable("start") Integer start, @PathVariable("end") Integer end) {
return rankService.listRank(start, end);
}
Service
public List<Map<String, Object>> listRank(Integer start, Integer end) {
Set<ZSetOperations.TypedTuple<Object>> typedTuples = RedisUtil.zRankWithScore("rankService:score:", start, end);
List<Map<String, Object>> llist = new ArrayList<>();
Iterator<ZSetOperations.TypedTuple<Object>> iterator = typedTuples.iterator();
while (iterator.hasNext()) {
ZSetOperations.TypedTuple<Object> next = iterator.next();
Map<String, Object> map = new HashMap<>(2);
map.put("score", next.getScore());
map.put("userId", next.getValue());
llist.add(map);
}
return llist;
}