You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
아무 설정도 안하면 ConcurrentMapCache를 사용하며, 이는 메모리에서 ConcurrentMap을 사용해 동시성을 고려한 방식을 사용
캐시 관리자
사실 CacheManager입니다
일부 종류(아마 기본값)는 다음과 같습니다
ConcurrentMapCacheManager: ConcurrentHashMap을 사용해 구현한 캐시
SimpleCacheManager: 기본적으로 제공하는 캐시가 없어 사용할 캐시를 직접 등록하여 사용하기 위한 캐시
EhCacheCacheManager: 자바에서 유명한 캐시 프레임워크 중 하나인 EhCache를 지원하는 캐시
CompositeCacheManager: 1개 이상의 캐시 매니저를 사용하도록 지원해주는 Mixed 캐시
CaffeineCacheManager: Java 8로 Guava 캐시를 재작성한 Caffeine 캐시를 사용하는 캐시
JCacheCacheManager: JSR-107 기반의 캐시를 사용하는 캐시
근데 사실 이런거 굳이 자세하게 알 필요 없고 지금은 ConcurrentMapCacheManager를 쓰고 있고 Redis 같이 다른 기술스택을 사용한다면 저런거 안쓰고 AbstractCacheManager 확장해서 쓰더라고요 그래서 CompositeCacheManager 정도만 알면 될 것 같습니다
캐싱 처리 방식
Look-Aside 방식
조회 전에 캐시된 값이 존재하는지 확인하고 있으면 바로 반환, 없으면 조회 로직 수행(DB 접근)
Write-Around 방식
저장할 때 캐시 안보고 바로 저장하는 방식
그런데 카테고리나 직거래 지역이나 저장하는 로직이 없으므로 고려하지 않았습니다
@Cacheable
Get 요청 메서드 위에 선언하면 자동으로 Look-Aside 방식으로 돌아갑니다
동작 방식은 다음과 같습니다
cache hit : 캐시한 데이터가 있는 경우, 조회 로직을 수행하지 않고 바로 반환하는 경우
cache miss : 캐시한 데이터가 없는 경우, 조회 로직을 수행하고 그 반환 값을 캐싱
주로 사용하는 필드는 다음과 같습니다
cacheNames : 메서드 호출 결과를 캐싱할 때의 캐시 이름
key : 저장된 캐시를 찾기 위한 키, 생략하면 메서드 매개변수로 들어가는 모든 값이 같아야 같은 캐시라고 인식합니다
기타 등등 다른 필드도 있는데 이건 필요할 때 찾아보시면 될 것 같습니다
효과
메모리에 있는 ConcurrentHashMap에서 조회하는거라 값이 대충 한 자릿수 ms가 걸리는 식으로 개선이 된다고 보시면 될 것 같습니다
시간...은 비율로 따지면 극적이기는 하지만 적용 전이나 후나 짧아서 시간으로는 큰 의미가 없을 것 같습니다
중요한 것은 직거래 지역이나 카테고리나 빈번하게 선택되는 항목들인데 DB에서 조회하는 행위가 생략됨으로써 짧은 시간이라도 커넥션을 점유하고 있는 시간을 없앨 수 있다는 점인 것 같습니다
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
@EnableCaching
ConcurrentMapCache
를 사용하며, 이는 메모리에서ConcurrentMap
을 사용해 동시성을 고려한 방식을 사용CacheManager
입니다ConcurrentMapCacheManager
:ConcurrentHashMap
을 사용해 구현한 캐시SimpleCacheManager
: 기본적으로 제공하는 캐시가 없어 사용할 캐시를 직접 등록하여 사용하기 위한 캐시EhCacheCacheManager
: 자바에서 유명한 캐시 프레임워크 중 하나인 EhCache를 지원하는 캐시CompositeCacheManager
: 1개 이상의 캐시 매니저를 사용하도록 지원해주는 Mixed 캐시CaffeineCacheManager
: Java 8로 Guava 캐시를 재작성한 Caffeine 캐시를 사용하는 캐시JCacheCacheManager
: JSR-107 기반의 캐시를 사용하는 캐시ConcurrentMapCacheManager
를 쓰고 있고Redis
같이 다른 기술스택을 사용한다면 저런거 안쓰고AbstractCacheManager
확장해서 쓰더라고요 그래서CompositeCacheManager
정도만 알면 될 것 같습니다Look-Aside
방식Write-Around
방식@Cacheable
Get
요청 메서드 위에 선언하면 자동으로Look-Aside
방식으로 돌아갑니다cache hit
: 캐시한 데이터가 있는 경우, 조회 로직을 수행하지 않고 바로 반환하는 경우cache miss
: 캐시한 데이터가 없는 경우, 조회 로직을 수행하고 그 반환 값을 캐싱ConcurrentHashMap
에서 조회하는거라 값이 대충한 자릿수 ms
가 걸리는 식으로 개선이 된다고 보시면 될 것 같습니다DB에서 조회하는 행위
가 생략됨으로써 짧은 시간이라도커넥션을 점유하고 있는 시간을 없앨 수 있다
는 점인 것 같습니다인증샷
Beta Was this translation helpful? Give feedback.
All reactions