maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
注入manage管理类
@Component
public class LocalCacheConfig {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<CaffeineCache> caffeineCaches = new ArrayList<>();
for (CacheConstant cacheType : CacheConstant.values()) {
// 注意这里的 cache name 是 @cacheable 注解中的 value 属性
caffeineCaches.add(new CaffeineCache(cacheType.toString(),
Caffeine.newBuilder()
.expireAfterWrite(cacheType.getExpires(), TimeUnit.SECONDS)
.maximumSize(cacheType.getMaximumSize())
.build()));
}
cacheManager.setCaches(caffeineCaches);
return cacheManager;
}
}
配置 缓存中key 生成策略
@Component("TestKeyGenerator")
public class TestKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
return generateKey(params);
}
/**
* Generate a key based on the specified parameters.
*/
public static Object generateKey(Object... params) {
if (params.length == 0) {
return SimpleKey.EMPTY;
}
if (params.length == 1) {
Object param = params[0];
if (param instanceof UtilizationRequest) {
return param.hashCode() +"__"+ TfcContextHolder.getEmailAddr();
}
}
return new SimpleKey(params);
}
}
在serviceImpl 中使用
@Cacheable(value = "UTILIZATION" ,keyGenerator = "utilizationKeyGenerator")
public User queryPersonByName(User user){
mapper.selectUser(user);
}
清除策略
//清除策略
@CacheEvict
//使用java api
cacheManager.getCache("UTILIZATION").evict(user);
cacheManager.getCache("UTILIZATION").clear();