Cache 추상화 이해하기
핵심부분에서 추상화는 Java method에 캐싱을 적용함으로써 캐시에 보관된 정보로 메서드의 실행 횟수를 줄여준다. 즉 대상 메서드가 실행될때마다 추상화가 해당 메서드가 같은 인자로 이미 실행되었는 확인하는 캐싱 동작을 적용한다. 해당 데이터가 존재한다면 메서드를 실행하지 않고 결과를 반환하고 존재하지 않는다면 메서드를 실행하고 그 결과를 캐싱한 뒤에 사용자에게 반환해서 다음번 호출시에 사용 할 수 있게 한다.
Spring cache는 cache 추상화를 지원하는데 EhCache, Redis, Couchbase 등 캐시 저장소와 빠르게 연동하여 bean으로 설정 할 수 있도록 도와준다.
선언적인 어노테이션 기반의 캐싱
@Cacheable
메소드에 지정 가능하고 지정된 메서드의 캐시 설정에 따라 데이터가 한번 생성되면 데이터가 캐싱되며, 다음 호출 시에 캐시에 저장된 데이터가 리턴된다.
@Cacheable 설정 옵션은 다음과 같다.
- value
- 캐싱 공간의 대표 명칭
- key
- Spring Expression Language(SpEl)으로 key생성을 지정
- 지정하지 않으면 모든 파라미터를 조합한 해시코드 값을 키로 생성
- condition
- 조건부 캐싱. SpEL로 지정하고 표현식이 true면 메서드를 캐시
사용가능한 SpEL evaluation context
이름 | 위치 | 설명 | 예시 |
---|---|---|---|
methodName | root object | 호출되는 메서드의 이름 | #root.methodName |
method | root object | 호출되는 메서드 | #root.method.name |
target | root object | 호출되는 대상 객체 | #root.target |
targetClass | root object | 호출되는 대상 클래스 | #root.targetClass |
args | root object | 대상을 호출하는데 사용한 인자(배열) | #root.args[0] |
caches | root object | 현재 실행된 메서드 캐시의 컬렉션 | #root.caches[0].name |
argument name | evaluation context | 메서드 인자의 이름. 어떤 이유로든 이름을 사용할 수 없다면(예: 디버깅 정보가 없는 경우) a<#arg>에서 인자 이름을 사용할 수도 있고 #arg은 (0부터 시작하는) 인자의 인덱스를 의미한다. | iban나 a0 (p0를 사용하거나 별칭으로 p<#arg> 형식을 사용할 수 있다) |
유의해야 할 점
[참고] https://ifuwanna.tistory.com/202
评论
发表评论