CacheConfiguration.java
package com.wilzwert.myjobs.infrastructure.configuration;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import com.github.benmanes.caffeine.cache.Caffeine;
/**
* @author Wilhelm Zwertvaegher
*/
@Configuration
@EnableCaching
public class CacheConfiguration {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
CaffeineCache emailCache = new CaffeineCache("emailExists",
Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES) // expires after 1 hour
.maximumSize(1000)
.build()
);
CaffeineCache usernameCache = new CaffeineCache("usernameExists",
Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES) // expires after 1 hour
.maximumSize(1000)
.build()
);
CaffeineCache urlMetadataCache = new CaffeineCache("urlMetadataExists",
Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES) // expires after 10 minutes
.maximumSize(1000)
.build()
);
CaffeineCache rulesCache = new CaffeineCache("rateLimitingRules",
Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES) // expires after 10 minutes
.maximumSize(1000)
.build()
);
CaffeineCache bucketCache = new CaffeineCache("rateLimitingBucket",
Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES) // expires after 10 minutes
.maximumSize(1000)
.build()
);
cacheManager.setCaches(Arrays.asList(emailCache, usernameCache, urlMetadataCache, rulesCache, bucketCache));
return cacheManager;
}
}