본문 바로가기
Spring/DB연동

SpringBoot에서 Redis로 Cache기능 구현하기

by doriver 2024. 6. 25.

아래 방법은

캐시에 없는 데이터인 경우 더 오랜 시간이 걸림
캐시가 최신 데이터를 가지고 있는가?

( 데이터베이스에 데이터가 업데이트 된다고 레디스가 업데이트 되는건 아님 )
TTL(Time-to-live)을 꼭 사용하여, Redis에 있는 데이터를 삭제해야 한다.

 

 

의존성

spring-boot-starter-data-redis
spring-boot-starter-cache

설정

application.properties

spring.cache.type=redis

 

spring.redis.host=localhost

spring.redis.port=6379

 

@Configuration, @EnableCaching 클래스

@Bean: RedisCacheManager
RedisConnectionFactory, RedisCacheConfiguration  >  RedisCacheManager

조회메서드에 @Cacheable 적용

@Cacheable(value = "getRedis", key = "#p0")
public String get(String key) { return "someData"; }

@Cacheable(value = "multiParam", key = "#p0 + '_' + #p1")
public String get22(String key, String kk) { return "multiParam someData"; }

 

@Cacheable을 통해 
메서드의 return값을 캐시에 저장하고
, 동일한 키로 조회할 때 캐시된 데이터를 반환

실제로 Redis에서 확인해보면

key값 multiParam::2param_zz , getRedis::1param 이 생겼고, 그 value값들은

\xac\xed\x00\x05t\x00\x13multiParam someData

\xac\xed\x00\x05t\x00\bsomeData 인걸 볼수 있다.

 

Redis상에서 value값이 이상한건

Java ~ Redis 간의 차이인듯

Java  Redis 
multiParam someData \xac\xed\x00\x05t\x00\x13multiParam someData
someData \xac\xed\x00\x05t\x00\bsomeData

 


@Cacheable이 붙은 메서드는 캐시에 데이터가 없을 때만 호출됨, 캐시에 데이터 있으면 메서드 호출 안되고 그 데이터 넘겨줌

( 실제로 디버깅 걸어서 확인했음 )

value속성 : 캐시의 이름을 지정하는 데 사용, 캐시를 구분하기 위한 식별자 역할
#p0 , #p1 : 첫 번째 매개변수, 두 번째 매개변수

@Cacheable에 의해 Redis에 데이터가 저장될때, key값

기본적으로 (캐시 이름)::(메서드 파라미터) 형식으로 생성됨
(@Cacheable의 value값)::(@Cacheable의 key값) 형식
( Spring Cache의 기본 키 생성 전략을 따름, 이를 커스터마이징할 수도 있음 )

'Spring > DB연동' 카테고리의 다른 글

Querydsl 01  (0) 2024.07.04
JPA 01  (0) 2024.07.02
SpringBoot에서 Redis로 데이터 저장,조회  (0) 2024.06.24
[JPA] @Entity 에서 컬럼이름 스네이크케이스로 자동변환됨  (0) 2024.05.23
JPA에서 update ( PersistenceContext )  (0) 2024.05.23