아래 방법은
캐시에 없는 데이터인 경우 더 오랜 시간이 걸림
캐시가 최신 데이터를 가지고 있는가?
( 데이터베이스에 데이터가 업데이트 된다고 레디스가 업데이트 되는건 아님 )
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 |