package jp.co.fujioh.weborder.config;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
/**
* <p>
* caffeine キャッシュ構成
* </p>
*
* @author li-pinliang
* @since 2021-04-05
*/
@Configuration
@EnableCaching
public class CacheConfig {
private static final int DEFAULT_TTL = 60 * 30 ;
@Bean(value = {"myKeyGenerator"})
public KeyGenerator keyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
return method.getName()+"["+ Arrays.asList(params).toString()+"]";
}
};
}
/**
* パーソナライズされた構成キャッシュ
*/
@Bean
public CacheManager cacheManager(){
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
// Caffeine 構成
Caffeine<Object, Object> caffeine = Caffeine.newBuilder()
// 最後の書き込み後、一定の時間が経過すると期限切れになります
.expireAfterWrite(DEFAULT_TTL , TimeUnit.SECONDS);
cacheManager.setCaffeine(caffeine);
return cacheManager;
}
}
配置keyGenerator
在 @Cacheable 配置 keyGenerator 属性,值就是前面配置的Bean名称
@Override
@Cacheable(value = {"REDIS:GETSTRING3"}, keyGenerator = "myKeyGenerator")
public String getString3(String tag, String name) {
return tag + " " + name;
}