Spring 使用缓存,在不明确表明使用的cacheManager时,使用系统默认方案。可供选择的方案有:AbstractCacheManager, AbstractTransactionSupportingCacheManager, CaffeineCacheManager, CompositeCacheManager, ConcurrentMapCacheManager, EhCacheCacheManager, GuavaCacheManager, JCacheCacheManager, NoOpCacheManager, SimpleCacheManager, TransactionAwareCacheManagerProxy
常用GuavaCache
方式一:
在一个component里定义如下:
private static LoadingCache<String, List<DictItem>>cache = null;
public void init(){
cache = CacheBuilder.newBuilder().maximumSize(1000).refreshAfterWrite(1, TimeUnit.DAYS)
.build(new CacheLoader<String, List<DictItem>>() {
@Override
public List<DictItem> load(String key) throws Exception {
Map<String, List<DictItem>> map=utilDao.getDicts();
map.forEach((K,V)->{
cache.put(K, V);
});
return cache.get(key);
}
});
Map<String, List<DictItem>> map=utilDao.getDicts();
map.forEach((K,V)->{
cache.put(K, V);
});
}
第一次查询是若无,会调用load方法加载,使用的时候,只要:
cache.get(fldms[i])即可。
方式二:
事先不知道缓存里存什么。产生时才存入:
定义缓存先:
publicstatic final StringUSER_CACHE = "CACHE_KEY";
@Bean
public Cache reportCache() {
return new GuavaCache(USER_CACHE, CacheBuilder.newBuilder()
.maximumSize(10)
.expireAfterWrite(1, TimeUnit.DAYS)
.build());
}
然后在产生要缓存的数据的方法里:
@Cacheable(CacheConfig.USER_CACHE)
public Map<String,Item> getCacheMap(){
return getCacheMap();
}
@Cacheable表示方法的结果是缓存的,下次调用方法时,直接从缓存里取数据。而不是真正执行方法
@CachePut(CacheConfig.USER_CACHE)
public Map<String,Item> refreshCache(){
return getCacheMap();
}
@CachePut 更新缓存里对应的值一直不太会编辑代码格式。抱歉。