Redis 캐시 기능 이용

Ena JJJ·2023년 3월 10일
0

spring boot에서 redis cache를 이용할 때, 리턴 값에 따라 정해진 key에 따른 value가 저장된다!!!

docker 이미지로 빌드된 Redis에서 redis-cli 접근법
docker exec -it 컨테이너이름 redis-cli


이 부분을 모르고, 내가 repository에 저장을 하면 저장했던 데이터가 그대로 바뀐다고 생각하고 저장을 해왔다.

    @Cacheable(value ="user_rank", key = "'user_rank_list'", cacheManager = "myCacheManager")
    public List<Rank> rankingList() {
        return rankRepository.findAll();
    }

위 코드에서 key값을 어떻게 설정해야될지 몰라서 빈값으로 놔뒀었는데, 그러면 Redis에 다음과 같이 저장이 된다.
"user_score::SimpleKey []" 이렇게 되면 key값을 어떻게 접근해야 될지 몰라서 문제가 계속 생겼었다. 하지만 위와 같이 "'user_rank_list'"로 한번 더 감싸줌으로써 String으로 key를 저장함으로써 원하는 key로 저장할 수 있었다. 그 다음은 저장되는 데이터의 문제가 생겼다. 기존에는 하나의 데이터를 업데이트 할 때, 해당 객체를 반환하는 메소드였는데
ex)

 @CachePut(value = "user_rank", key = "'user_rank_list'", cacheManager = "myCacheManager")
    public Rank updateRankScore(GameEndReq request) 

이렇게 되면 Rank객체 하나가 key에 해당하는 value로 업데이트 되서 기존에 캐시되어있던 리스트들이 전부 사라졌다.

그래서 결국 리턴값에 따라 변한다는 것을 알게 되며 아래와 같이 고칠 수 있었다.

 @CachePut(value = "user_rank", key = "'user_rank_list'", cacheManager = "myCacheManager")
    public List<Rank> updateRankScore(GameEndReq 

이를 통해, 랭킹 리스트를 캐싱해두고, 캐시해 둔 데이터에서 특정 데이터가 변경될때만 @Cacheput Annotation을 통하여 그 부분만 캐시에서 수정하는 방법을 구현할 수 있었다.

0개의 댓글