일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DB
- 스프링의 정석
- Kafka
- 프로그래머스
- 시큐리티
- AWS
- 개인프로젝트
- java
- Spring
- CentOS
- Spring Security
- 쇼트유알엘
- 데이터베이스
- WEB SOCKET
- 생성자 주입
- 패스트캠퍼스
- 항해99
- 웹개발
- 스파르타코딩클럽
- JavaScript
- docker
- JWT
- 남궁성과 끝까지 간다
- MYSQL
- visualvm
- emqx
- @jsonproperty
- 스웨거
- 카프카
- EC2
- Today
- Total
Nellie's Blog
[Redis] 레디스 캐시를 사용하면 조회 성능이 몇 배 정도 빨라질까? (@Cacheable) 본문
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을 따로 빈등록 해주어야 한다.
나는 레디스설정까지 모두 추가하여 레디스캐시로 사용하였다.
레디스 캐시로 조회는 처음 사용해보는데, 앞으로 자주 애용해야 겠다!
조회 엄청 빨라지는 레디스 캐시 개꿀~~~😍
'DB > Database' 카테고리의 다른 글
[Redis] Redis 라이브러리 3종 비교 (Spring redis vs Lettuce vs Redisson) (0) | 2024.07.28 |
---|---|
[Redis] CentOS8에 redis 설치 및 springboot 연동하기 (0) | 2024.06.27 |
[MyBatis] getter 메소드 자동 사용(?) (0) | 2024.01.16 |
[MySQL] 계층형 조회 (Recursive 재귀 쿼리) (1) | 2024.01.09 |
MariaDB / DBeaver 에서 컬럼 Auto increment 숫자 변경 (0) | 2023.11.30 |