2017-10-02 9 views
1

몇 가지 요소를 캐싱하기 위해 스프링 캐시를 사용하고 있습니다. 그래서 사용자가 요소의 동일한 키를 요청할 때마다 캐시로 이동하여 사용 가능한지 여부를 확인합니다. 사용 가능한 경우 캐시에서 페치하고 그렇지 않으면 메소드를 실행합니다. 하지만이 모든 것을하기 전에 캐시에 하나 이상의 기능을 구현하려고합니다.시간 단위로 Spring 캐시에서 엔트리를 무효화하는 방법은 무엇입니까?

요구 사항 : 캐시의 모든 요소가 1 시간 이상 존재하면 스프링 캐시가 시간별로 점검하여 제거합니다.

Google에서 검색했지만 만족스러운 링크를 찾지 못했습니다. 누군가 나에게 도움을 주거나 동일한 링크를 제공 할 수 있습니까?

+0

, 그것은 당신의 기본 캐시 구현에 구성하고 있습니다. – chrylis

+0

@chrylis 나는 그것이 문제가 아니라는 것을 안다. 그러나 나는 그것을하는 방법을 이해할 수 없다. 도움이되는 링크를 제공해 줄 수 있습니까? – vsr

+0

어떤 캐시 공급자를 사용하고 있습니까? – dimitrisli

답변

1

캐시의 TTL (Time To Live)을 설정해야합니다. 당신이하는 일은 당신의 현금 서비스 제공자에 달려 있습니다. 몇 가지 예는 여기에서 찾을 수 있습니다 :

이 봄 캐시에 문제가되지 않습니다

Can I set a TTL for @Cacheable

@EnableCaching 
@Configuration 
public class CacheConfiguration implements CachingConfigurer { 

    @Override 
    public CacheManager cacheManager() { 
     ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() { 

      @Override 
      protected Cache createConcurrentMapCache(final String name) { 
       return new ConcurrentMapCache(name, 
        CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(100).build().asMap(), false); 
      } 
     }; 

     return cacheManager; 
    } 

    @Override 
    public KeyGenerator keyGenerator() { 
     return new DefaultKeyGenerator(); 
    } 

} 
+0

고마워요. 친구. 그래서 SImpleCacheManager를 사용하고 내부에 ConcurrentMapCache를 설정했습니다. 기본 설정으로 COncurrentMapCache에 캐시의 이름 만 넣었습니다. 그러나 위의 설정을 적용하면됩니다. CacheBuilder.newBuilder(). expireAfterWrite (30, TimeUnit.MINUTES). 잘 작동합니다. – vsr