TIL(23-03-23)

allnight5·2023년 3월 23일
0

TIL

목록 보기
55/55

스프링 캐싱

1.첫번째
Application.java에

@EnableCaching

어노테이션 추가

  1. 첫번째내용에 @Cacheable을 위에 추가
Optional<BaseEntity> findByUsername(String username);
@Cacheable(value="BaseEntity", key="#username", condition="#result!=null")
Optional<BaseEntity> findByUsername(String username);

3.@Cacheable 짤막한 설명

@Cacheable(value="BaseEntity",
key="#username", cacheNames = "BaseEntity"
condition="#result!=null"
unless = "#result == null",
sync = true)

sync = true 동기 적용(기본적으로 비동기)
sync는 캐시 구현체가 thread safe 하지 않을 때 사용
(이유는 걸어두면 단 하나의 쓰레드만 해당 메소드를 처리한다.
그 후의 요청들은 해당 작업이 끝날 때까지 기다리게 됨.
모든 CacheManager는 핵심 프레임워크가 지원하는 한에서
기능을 제공하기 때문에 문서를 잘 살펴볼 것)

unless 의 조건을 충족할때는 캐싱하지 않는다

condition의 조건을 충족할때 캐싱한다.

value 그냥 캐싱 이름 붙여주는거
cacheNames 캐싱 이름 붙여주는거
key 캐싱이 있을때 그 키 값을 컴퓨터가 알수있게 해주는것
이유 redis에 캐싱의 value값과 key값이 융합되어있는것도 있음
BaseEntity :: owner8 이런식으로 owner8 이런식으로 되어있는것도있고
하나일수도있고 두개일수도 있으니 key값과 value 등으로 구분 할수있게
해준다고 함 아닐수도있으니 한번씩 찾아보시길 key와 value는

참고자료
내부메소드에 캐싱을 사용하면 안된다.
https://kim-solshar.tistory.com/84

이거 하는데 하루걸렸다. 그 이유는 DB를 .yml의 jpa의 ddl-auto: none 로 해두고 컬럼을 추가하고 사용하여 없는것은 찾으니 에러로 계속
user not found나 keys null이라는 에러코드를 보내온것이다.

Null key returned for cache operation

redis로 캐싱할때 위와 같은 에러가 뜬다면
1. DB에 내가 정확하게 하고있는지
1-1 . 없는 컬럼으로 검색하고 있지 않은지
1-2. redis에 넣을때 내가 검색하려는 키값으로 넣고 있는지
2. 메소드에서 사용하는거라면
@RequestBody 와 같이 통신해야 하는걸 잊어버리지 않았는지
잘 확인하도록 하자

profile
공부기록하기

0개의 댓글