코딩하는 오징어
Spring에서 Redis ZSET구조 이용하기 본문
반응형
Redis의 ZSET구조를 이용하여 LEADER BOARD 구현하기
@Repository public class LeaderBoardRedisRepository { public static final String KEY = "leaderBoard"; @Autowired private RedisTemplate<String, String> redisTemplate; private ZSetOperations<String, String> zSetOps; @PostConstruct public void init() { zSetOps = redisTemplate.opsForZSet(); } public List<String> getPlayersRankOfRange(int startIndex, int endIndex) { Set<String> rankReverseSet = zSetOps.reverseRange(KEY, startIndex, endIndex); Iterator<String> iter = rankReverseSet.iterator(); List<String> list = new ArrayList<>(rankReverseSet.size()); while (iter.hasNext()) { list.add(iter.next()); } return list; } public PlayerRankModel getOnePlayerRank(String nickname) { Long playerRank = zSetOps.reverseRank(KEY, nickname); if (playerRank == null) { throw new NotFoundException("Please check nickname"); } PlayerRankModel playerRankModel = new PlayerRankModel(); playerRankModel.setNickname(nickname); playerRankModel.setRank(playerRank.longValue() + 1); playerRankModel.setScore(zSetOps.score(KEY, nickname)); return playerRankModel; } public void updateLeaderBoard(String winner, double winnerScore, String loser, double loserScore) { zSetOps.add(KEY, winner, winnerScore); zSetOps.add(KEY, loser, loserScore); } }
반응형
'Framework > Spring' 카테고리의 다른 글
intellij에서 Spring 4 초기 환경 세팅에서 디비연동까지 한 번에 하기 (Maven & Mysql & Mybatis) (7) | 2018.03.09 |
---|---|
Spring 4 하나 이상의 Dispatcher Servlet 설정하기 (1) | 2018.03.07 |
Spring 4 mvc에서 Restful API (0) | 2018.03.06 |
Spring boot @Annotation으로 AOP적용하기 (0) | 2018.03.04 |
@Bean 과 @Component의 차이 (1) | 2018.02.27 |
Comments