일반적으로 application 값비싼 계산 결과나 data 조회하는 것이 data-source 느리게 하는  경우 (ex. Database or webservice) cache data 저장한다. 만약 그러한 데이터가 도시명이나 제품 형태와 같이 변경할 없다면 (혹은 대부분 변경할 없는 경우) 그러한 형태로 저장하는 경우는 의미가 있다하지만, 데이터가 주기적으로 재생성되거나 다시 조회해야 필요가 있다면 expiration time (유효기간) 설정하는 것을 고려해볼 만하다. 이런 cache entry들을 mortal (생명주기를 갖는 데이터)이라고 한다. Infinispan에서는 2가지 형태로 entry expiration time 설정할 있다.

  • 데이터가 cache 저장된 이후 유효 기간 (ex. lifespan)
  • 데이터의 최종 접근 시간 (last accessed time)이후 유효 기간 (ex. Maximum idle time)

Cache Interface 특별히 하나 혹은 두가지 expiration properties들을 적용할 있도록 put() method overloaded version 제공한다. 다음 예제는 5초간의 유효기간을 갖는 entry 어떻게 저장하는 지를 보여준다.


cache.put(location, weather, 5, TimeUnit.SECONDS);


이것을
유념하면서 application 다시 실행시켜 보자.


git checkout -f step-3

mvn clean package exec:exec


[Output]

---- Fetching weather information ----
Rome, Italy - Temperature: 12.9° C, Conditions: light rain
Como, Italy - Temperature: 6.3° C, Conditions: Sky is Clear
Basel, Switzerland - Temperature: 0.8° C, Conditions: overcast clouds
Bern, Switzerland - Temperature: -1.6° C, Conditions: broken clouds
London, UK - Temperature: 1.8° C, Conditions: light rain
Newcastle, UK - Temperature: 2.6° C, Conditions: scattered clouds
Bucharest, Romania - Temperature: 9.3° C, Conditions: scattered clouds
Cluj-Napoca, Romania - Temperature: 6.4° C, Conditions: scattered clouds
Ottawa, Canada - Temperature: -7.0° C, Conditions: overcast clouds
Toronto, Canada - Temperature: -7.0° C, Conditions: broken clouds
Lisbon, Portugal - Temperature: 14.6° C, Conditions: overcast clouds
Porto, Portugal - Temperature: 12.2° C, Conditions: moderate rain
Raleigh, USA - Temperature: 3.9° C, Conditions: Sky is Clear
Washington, USA - Temperature: 3.4° C, Conditions: light rain
---- Fetched in 1205ms ----
---- Fetching weather information ----
Rome, Italy - Temperature: 12.9° C, Conditions: light rain
Como, Italy - Temperature: 6.3° C, Conditions: Sky is Clear
Basel, Switzerland - Temperature: 0.8° C, Conditions: overcast clouds
Bern, Switzerland - Temperature: -1.6° C, Conditions: broken clouds
London, UK - Temperature: 1.8° C, Conditions: light rain
Newcastle, UK - Temperature: 2.6° C, Conditions: scattered clouds
Bucharest, Romania - Temperature: 9.3° C, Conditions: scattered clouds
Cluj-Napoca, Romania - Temperature: 6.4° C, Conditions: scattered clouds
Ottawa, Canada - Temperature: -7.0° C, Conditions: overcast clouds
Toronto, Canada - Temperature: -7.0° C, Conditions: broken clouds
Lisbon, Portugal - Temperature: 14.6° C, Conditions: overcast clouds
Porto, Portugal - Temperature: 12.2° C, Conditions: moderate rain
Raleigh, USA - Temperature: 3.9° C, Conditions: Sky is Clear
Washington, USA - Temperature: 3.4° C, Conditions: light rain
---- Fetched in 2ms ----
---- Fetching weather information ----
Rome, Italy - Temperature: 12.9° C, Conditions: light rain
Como, Italy - Temperature: 6.3° C, Conditions: Sky is Clear
Basel, Switzerland - Temperature: 0.8° C, Conditions: overcast clouds
Bern, Switzerland - Temperature: -1.6° C, Conditions: broken clouds
London, UK - Temperature: 1.8° C, Conditions: light rain
Newcastle, UK - Temperature: 2.6° C, Conditions: scattered clouds
Bucharest, Romania - Temperature: 9.3° C, Conditions: scattered clouds
Cluj-Napoca, Romania - Temperature: 6.4° C, Conditions: scattered clouds
Ottawa, Canada - Temperature: -7.0° C, Conditions: overcast clouds
Toronto, Canada - Temperature: -7.0° C, Conditions: broken clouds
Lisbon, Portugal - Temperature: 14.6° C, Conditions: overcast clouds
Porto, Portugal - Temperature: 12.2° C, Conditions: moderate rain
Raleigh, USA - Temperature: 3.9° C, Conditions: Sky is Clear
Washington, USA - Temperature: 3.4° C, Conditions: light rain
---- Fetched in 1048ms ----


Expiration 어떻게 동적하는지를 보여주기 위해서 우리는 5초간의 sleep time 추가하고, 세번째로 도시의 날씨를 조회하여 출력해 보았다. 위에서 보는 것처럼 세번째 조회 작업 수행 시간은 거의 첫번째 경우 (uncached case) 비슷하게 측정되는 것을 있다 : 모든 entries들이 유효기간이 지났다. Infinispan에서 expiration 느슨하게 확인한다. 예를 들어, 유효기간이 지난 entry 조회하려고 시도할 경우, 시점에 해당 entry cache에서 삭제될 것이다. Eviction 사용하여 pro-active removal (선제적으로 삭제) 가능하다.


기본적으로 cache 모든 entry 대해서 expire되기를 원하는 경우에는 특별히 put() method 호출을 사용할 필요 없이 cache 대한 설정으로 처리할 있다. 이것은 다음 단계에서 설명할 것이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/670

트랙백 주소 :: http://www.yongbi.net/trackback/670

트랙백 RSS :: http://www.yongbi.net/rss/trackback/670

댓글을 달아 주세요

댓글 RSS 주소 : http://www.yongbi.net/rss/comment/670
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다