DB/Database

[Redis] 레디스 캐시를 사용하면 조회 성능이 몇 배 정도 빨라질까? (@Cacheable)

Nellie Kim 2024. 7. 31. 16:11
728x90

1. 레디스 캐시 안 썼을 때 조회 시간

SecuritySupportSvcImpl

	@Override
	public List<ComRoleUserDto> getLoginUserRole(String userId) {
		return securitySupportDao.getLoginUserRole(userId);
	}

 

컨트롤러

    @GetMapping("/mapg")
    public List<ComRoleUserDto> getLoginUserRole() {
        final List<ComRoleUserDto> list = securitySupportSvc.getLoginUserRole("admin");

        return list;
    }

 

호출을 하면 64초 정도가 나온다. 여러번 호출해봐도 비슷하다.

 

2. 레디스 캐시 썼을 때 조회 시간

SecuritySupportSvcImpl

	@Cacheable(value = "cacheNameTest") // 🎯 추가 !! 
	@Override
	public List<ComRoleUserDto> getLoginUserRole(String userId) {
		return securitySupportDao.getLoginUserRole(userId);
	}

 

10초 대로 확 줄었다. 원래는 DB에서 많은 데이터를 긁어와서 테스트를 해봐야하지만, 귀찮아서 이 정도로만 테스트 ^^;

 

 

그리고 한 번 호출 시, 캐시 이름이 생성되는지도 확인해보았다.

    // 모든 캐시의 키 밸류 가져오기
    @GetMapping("/allCacheKeyValue")
    public Map<String, Object> getAllCacheValues() {
        Map<String, Map<Object, Object>> allCacheValues = new HashMap<>();

        final HashMap<String, Object> map = new HashMap<>();

        // 모든 캐시 이름을 조회
        for (String cacheName : cacheManager.getCacheNames()) {
            map.put(cacheName, cacheName);
        }

        return map;
    }

 

한 번 호출을 하면,

없었던 ‘cacheNameTest’가 생기는 것도 확인할 수 있었다!

 

@Cacheable어노테이션을 붙이고 호출을 하면 1번째 호출할 때는 DB에서 가져와 캐시에 저장해놓고,

2번째 호출부터는 해당 캐시에서 데이터를 가져오기 때문에 빨라지는 것이다.

 

 

레디스 UI 에서도 cachNameTest 란 Key 값으로 캐시가 저장된 것을 확인할 수 있다.

 

결론

@Cacheable 을 쓰자.

 

조회 속도가 6배 정도 빨라졌다. (물론 대용량 데이터로 다시 실험해봐야 하지만...다른 테스트 블로그 보면 대용량 데이터는 3배 정도 빨라지는 것 같다.)

 

스프링부트는 기본적으로 ConcurrentMapCache를 지원해준다. 아무것도 의존성 추가하지 않아도 그냥 쓸 수 있다. 

 

레디스 캐시를 사용하고 싶으면,

pom.xml 파일에 ‘스프링부트 스타터 데이터 레디스’ 추가하면, 자동으로 기본 캐시가 ConcurrentMapCache 에서 RedisCache 로 설정된다.

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
			<version>3.3.1</version>
		</dependency>

 

이렇게만 해도 기본적인 캐시는 사용 가능하다.  더 세부적인 설정은 물론 RedisCacheConfiguration을 따로 빈등록 해주어야 한다. 

 

나는 레디스설정까지 모두 추가하여 레디스캐시로 사용하였다.

 

레디스 캐시로 조회는 처음 사용해보는데, 앞으로 자주 애용해야 겠다!

조회 엄청 빨라지는 레디스 캐시 개꿀~~~😍