springboot 使用缓存

来源:互联网 发布:国家电网数据分析师 编辑:程序博客网 时间:2024/06/05 20:02

Spring  使用缓存,在不明确表明使用的cacheManager时,使用系统默认方案。可供选择的方案有:AbstractCacheManagerAbstractTransactionSupportingCacheManagerCaffeineCacheManagerCompositeCacheManagerConcurrentMapCacheManagerEhCacheCacheManagerGuavaCacheManagerJCacheCacheManagerNoOpCacheManagerSimpleCacheManagerTransactionAwareCacheManagerProxy

 

常用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>>() {@Overridepublic 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])即可。


方式二:

事先不知道缓存里存什么。产生时才存入:

定义缓存先:

 publicstaticfinal 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 更新缓存里对应的值
一直不太会编辑代码格式。抱歉。
0 0
原创粉丝点击