잘 모르는 개념은 싹 정리해서 읽고 또 읽어야 하는데,
맥북 메모장에만 적혀 있으면 언제 읽나요?
지금 읽으려고 적습니다.
입사 초기에 너무나도 생소했던 Cache~
어플리케이션, 클래스 등에 붙이는 어노테이션
어노테이션이 붙은 부분에 캐싱 기능이 활성화 되도록 한다
캐시를 저장, 조회
캐시에 데이터가 없으면 기존의 로직을 실행한 뒤 캐시에 데이터를 저장
캐시에 데이터가 있으면 그 데이터를 리턴
(사용 예시 추가하기)
필수 속성
선택 속성
메소드에 파라미터가 없으면 0이라는 디폴트 값을 key로 생성
만약 파라미터가 여러 개면 파라미터들의 hash code 값을 조합하여 키 생성
여러 개의 파라미터 중 1개의 키 값으로 지정하고 싶다면 별도로 지정해주면 된다 (ex. key = "#bookId")
unless="#result == null"
null 값이 캐쉬 처리 되지 않도록 하기 위해
캐시에 값을 저장하는 용도
조회 시 저장된 캐시 내용을 사용하지 않고, 항상 메서드의 로직을 실행
(메서드의 흐름 최적화보다는 캐시 생성에 사용해야 함)
실행 시 캐시 내용 제거
동작할 때 영향을 끼치는 하나 이상의 캐시를 지정해야 함
key 값을 적용할 경우, 같은 key 값을 가진 캐시만 제거
메서드 시작 전에 캐시를 비우는 작업을 수행함
삭제는 메서드가 성공적으로 완료되면 수행함 -> 캐시 되어서 메서드가 실행되지 않거나 예외가 발생하면 실행되지 않아서 항상 제거를 원하면 해당 옵션 쓰기
한 지역의 전체 캐시를 지워야 할 때
value로 지정된 모든 것을 지우는 듯? (key에 관계 없이)
더 깊게 이해하려면: https://javaiyagi.tistory.com/352
캐시의 어노테이션을 여러 개 지정해야 하는 경우가 있을 때 감싸서 사용한다
@Caching(evict = @CacheEvict(), put = @CachePut())
참고 url: https://blog.outsider.ne.kr/1094
(참고: https://kim-oriental.tistory.com/28)
key-value 구조의 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 데이터베이스 관리 시스템
캐싱할 응답 값이 String이 아니라 Json 같은 형태라면 Serializer 에러가 발생함
-> CacheManager 설정을 해줌
-> json 포맷 지원을 위한 Jackson2JsonRedisSerializer 또는 GenericJackson2JsonRedisSerializer로 변경
RedisCacheConfiguration > defaultCacheConfig > serializeValueWith(ReidsSerializationContext.SerializationPair.fromSelializer(new Generic 어쩌고)) -> 이런 식으로 값 수정
-> entryTtl 캐시 수명 설정
추가 예정
추가 예정