跳至主要内容

Spring Cache

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
이름위치설명예시
methodNameroot object호출되는 메서드의 이름#root.methodName
methodroot object호출되는 메서드#root.method.name
targetroot object호출되는 대상 객체#root.target
targetClassroot object호출되는 대상 클래스#root.targetClass
argsroot object대상을 호출하는데 사용한 인자(배열)#root.args[0]
cachesroot object현재 실행된 메서드 캐시의 컬렉션#root.caches[0].name
argument nameevaluation context메서드 인자의 이름. 어떤 이유로든 이름을 사용할 수 없다면(예: 디버깅 정보가 없는 경우) a<#arg>에서 인자 이름을 사용할 수도 있고 #arg은 (0부터 시작하는) 인자의 인덱스를 의미한다.iban나 a0 (p0를 사용하거나 별칭으로 p<#arg> 형식을 사용할 수 있다)












유의해야 할 점

@Cacheable은 Spring AOP를 이용하기 때문에 동일한 클래스 내 @Cacheable이 설정된 메서드를 호출할 경우 캐싱된 결과를 가져오지 못하고 메서드를 재실행 한다. 이를 해결하기 위한 방법은 internal call이 아닌 Proxy Bean를 참조하여 캐싱된 데이터를 받아 오는 것이다.

[참고]   https://ifuwanna.tistory.com/202
















评论

此博客中的热门博文

R 함수

cut() cut  : 숫자들을 구간에 따라 분류해 factor로 변환한다. cut(x, breaks, right = F) # x는 숫자 vector # breaks는 구간을 저장한 vector 또는 구간의 수 # right는 breaks로 나뉘어진 구간에서 오른쪽 끝 값 사용에 대한 논리값 (T/F)으로, right = F의 경우 [a, b)로 됨 cut()에서 구간들은 (start, end] 형태로 정의되고, 0 < x <= end를 의미한다. 1~10사이의 수가 breaks에서 나눈 (0,5]와 (5, 10]구간에서 어느 곳에 속하는지 나타내는 factor를 반환한다.

Python - Numpy

random module np.random. normal (loc = 0.0, scale = 1.0, size = None) 정규 분포 확률 밀도에서 표본 추출함. 생성된 난수는 정규 분포의 형상을 가짐 Parameters: loc :  정규분포 평균 ( 중심점 ) scale :  표준편차 size : Output shape.  개수 혹은  ( 행 ,  열 ) Returns: out :  설정된  parameters 에 따른   ndarray or scalar  값을 반환 ex) np.random.normal(0, 1, (2, 3)) 평균이 0 이고 표준편차가 1 인 정규분포를 띄는 2x3 의 행렬 값을 반환 받음

기초 통계 함수

데이터의 기본적인 특징을 알려주는 기초 통계량  평균 분산 표준 편자 다섯 수 치 요약 최빈값 평균 (Mean) 평균을 계산한다. mean  : 평균을 계산한다. mean( x, trim=0, na.rm=FALSE, ...) # trim은 절사평균 을 사용할 때 (0, 0.5)로 지정 # na.rm는 평균 계산전 NA를 제거할지 여부 절사평균 (Trimmed Mean)이란?    데이터를 크기 순서로 나열한 뒤 값이 작은 쪽과 큰 쪽에서 얼마만큼의 데이터를 제거한 다음 평균을 계산 분산 (var) var  : 분산을 계산한다. var(x, na.rm=FALSE) > var(1:5) [1] 2.5 > var(mpg) [1] 36.3241028225806 표준 편차 (sd) sd:  표준 편차를 계산한다. sd(x, na.rm=FALSE) 다섯 수치 요약 최소값, 제1사분위수, 중앙값, 제3분위수, 최댓값으로 요약 fivenum  : 다섯 수치 요약을 구한다. fivenum(x, na.rm=TRUE) summary는 fivenum과 유사하지만 추가로 평균까지 계산한다. 최빈값(mode) 데이터에서 가장 자주 나타난 값을 말한다. table()을 사용해 각 데이터가 출현한 횟수를 센 분할표(Contigency Table)를 만든다. table  : 분할표를 작성한다. table( ... # 팩터로 해석할 수 있는 하나 이상의 객체 ) 반환 값은 table 클래스의 인스턴스이고 인자에 지정한 팩터들의 빈도수를 구한 결과를 저장 분할표(Contigency Table)란? 값의 빈도를 변수들의 값에 따라 나누어 그린 표