2013-01-11 3 views
1

@Cacheable봄 3.1을 사용하고 있습니다. Cacheable에서 값 및 키 매핑 매개 변수와 약간 혼동합니다.@ Spring 3.1에서 캐시 가능

여기 일이 무엇
@Cacheable(value = "message", key = "#zoneMastNo") 
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo) { 
//..code to fetch data form database.. 
return list; 
} 

@Cacheable(value = "message", key = "#areaMastNo") 
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo) { 
//..code to fetch data form database.. 
return list; 
} 

, 두 번째 방법은, 하지만 문제는 내가 zoneMastNo = 1 areaMastNo = 1 개 다음 두 번째 방법을 통과 할 때 가정되는 첫 번째 방법의 선택 값에 따라 달라집니다 : 여기 내가 뭐하는 거지입니다 첫 번째 메소드 결과를 리턴합니다. 사실, 나는 많은 서비스를 가지고 있으므로 특정 사용 사례에 대해 캐시 가능한 값을 사용하려고합니다. 내 질문 :

  • 어떻게이 문제를 해결할 수 있습니까?
  • 모든 서비스에 캐시 가능을 사용하는 것이 좋습니까?
  • 지정한 시간이 지나면 @CacheEvict를 사용하여 없이 메모리에서 완전히 제거됩니다.

답변

0

질문 3 : 캐시 만료 설정에 따라 다릅니다. ehcache를 사용하는 경우 ehcache.xml의 설정을 변경하십시오.

+0

즉, ehcache.xml에서 timeToIdleSeconds = "180"timeToLiveSeconds = "180"overflowToDisk = "true"로 정의한 경우 diskExpiryThreadIntervalSeconds = "180"3 분 후에 캐시 된 값이 제거됩니까? 또한 요소의 특성을 설명하는 몇 가지 링크를 전단 할 수 있습니까? – Balasaheb

2
  • 어떻게이 문제를 해결할 수 있습니까?

zoneMastNo 가정 areaMastNo는 완전히 다른 열쇠가되는 I List<Option>1 = zoneMastNo위한 것은 areaMastNo = 1위한 List<Option>과 동일하지 의미한다. 즉, 두 개의 캐시이 필요합니다. 하나는 영역별로, 다른 하나는 영역별로 입력해야합니다. 그러나 명시 적으로 하나의 캐시를 사용하여 message라는 캐시를 사용하고 있습니다. 29.3.1 @Cacheable annotation 인용 :

@Cacheable("books") 
public Book findBook(ISBN isbn) {...} 

을 위의 코드 조각에서, 방법 findBook은 books라는 이름의 캐시와 연결되어 있습니다.

@Cacheable(value = "byZone", key = "#zoneMastNo") 
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo) 
//... 
@Cacheable(value = "byArea", key = "#areaMastNo") 
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo) 

또한 이러한 방법은 다른 결과 local 매개 변수에 따라이 없습니다 확신 : 내가 제대로 이해한다면

그래서, 당신은 기본적으로 두 개의 서로 다른 캐시를 사용해야합니까? 그렇지 않다면 무엇을 위해 사용됩니까? 그것은 모든 서비스를 위해 캐시 사용하는 것이 좋습니다


인가? 다음과 같은 이유로

없음

:

  • 몇 가지 방법 그냥 충분히 빨리
  • 있습니다 ...및 캐싱에 약간의 오버 헤드를 도입 자체
  • 일부 서비스는 다른 서비스를 호출하면 계층 구조의 모든 수준에 캐싱을해야합니까 캐싱 메모리를 필요로
  • , 그것의 많은
  • 캐시 무효화 어렵다

@CacheEvict를 사용하지 않고 지정된 시간이 지나면 메모리에서 완전히 제거됩니다.

캐시 구현에 따라 달라집니다. 그러나 모든 정상적인 구현에는 이러한 옵션이 있습니다. EhCache.

관련 문제