guva缓存写法非常简单,建议是Optional对象,防止缓存击穿的问题
如下的模板,expireAfterWrite 要比 refreshAfterWrite 长一点,因为refreshAfterWrite是自动刷新值,而expireAfterWrite是过期值,这样才能实现自动刷新缓存
private final LoadingCache<String, Optional<SYSConfigPO>> SYSConfigListKeyCache = CacheBuilder.newBuilder()
.initialCapacity(150)
.expireAfterWrite(6, TimeUnit.MINUTES)
.refreshAfterWrite(4, TimeUnit.MINUTES)
.concurrencyLevel(5)
.recordStats()
.build(new CacheLoader<String, Optional<SYSConfigPO>>() {
@Override
public Optional<SYSConfigPO> load(@Nonnull String type) {
SYSConfigPO po = sysConfigMapper.selectOneByCKey(type);
return Optional.ofNullable(po);
}
});