web-dev-qa-db-ja.com

有効期限@キャッシュ可能なスプリングブート

キャッシュを実装しましたが、有効期限を追加したいと思います。

@Cacheableを使用してスプリングブートの有効期限を設定するにはどうすればよいですか?

これはコードスニペットです。

@Cacheable(value="forecast",unless="#result == null")
28
nole

私はこのようにライフハッキングを使います

    @Configuration
    @EnableCaching
    @EnableScheduling
    public class CachingConfig {
        public static final String GAMES = "GAMES";
        @Bean
        public CacheManager cacheManager() {
            ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager(GAMES);

            return cacheManager;
        }

        @CacheEvict(allEntries = true, value = {GAMES})
        @Scheduled(fixedDelay = 10 * 60 * 1000 ,  initialDelay = 500)
        public void reportCacheEvict() {
            System.out.println("Flush Cache " + dateFormat.format(new Date()));
        }
    }
20
Atum

リファレンスドキュメント から

キャッシュプロバイダーから直接。キャッシュの抽象化は…まあ、キャッシュの実装ではなく抽象化です。使用しているソリューションは、他のソリューションではサポートされていないさまざまなデータポリシーや異なるトポロジをサポートする場合があります(たとえば、JDK ConcurrentHashMapを使用します)。このような機能は、設定時に、またはネイティブAPIを介して、バッキングキャッシュを通じて直接制御する必要があります。

10
Stephane Nicoll

この回答では ehcache を使用していることに注意してください。これは、サポートされているSpring Bootキャッシュマネージャーの1つであり、おそらく最も人気のあるものの1つです。

最初にpom.xmlに追加する必要があります:

<!-- Spring Framework Caching Support -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

src/main/resources/ehcache.xml ::

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <defaultCache eternal="true" maxElementsInMemory="100" overflowToDisk="false" />
    <cache name="forecast" 
           maxElementsInMemory="1000" 
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           overflowToDisk="false"
           memoryStoreEvictionPolicy="LRU" />
</ehcache>
7
Steve

私はカフェインキャッシングを使用しますが、この構成では60分の有効期限があります。

spring.cache.cache-names=forecast
spring.cache.caffeine.spec=expireAfterWrite=60m
2
slartidan

@cacheableにはそのような構成可能なオプションがないため、@ cacheable表記では有効期限を指定できません。

ただし、スプリングキャッシングを提供するさまざまなキャッシングベンダーは、独自の構成を通じてこの機能を提供しています。たとえば、 NCache / TayzGrid を使用すると、 設定可能な有効期限で異なるキャッシュ領域を作成 できます。

独自のキャッシュを実装している場合は、キャッシュプロバイダーで有効期限を指定する方法を定義する必要があります。また、ソリューションに有効期限ロジックを組み込む必要があります。

2
Sameer Shah