google guava LoadingCache本地缓存使用方法

java | 2020-12-15 09:26:04

1.需求场景

如果你要做跨系统全局缓存,高可用又性能高,存储量还大当然有memcache,redis首选,其次要求没那么高还有oscache,ehcache也可以单机使用。

但是如果只想单机简单快速的使用一下guava LoadingCache就是非常好的选择了

2.guava LoadingCache

线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素。
提供了三种基本的缓存回收方式:基于容量回收、定时回收和基于引用回收。定时回收有两种:按照写入时间,最早写入的最先回收;按照访问时间,最早访问的最早回收。
监控缓存加载/命中情况。
集成了多部操作,调用get方式,可以在未命中缓存的时候,从其他地方获取数据源(DB,redis),并加载到缓存中。
可以设置缓存超时,缺点Guava Cache的超时机制不是精确的。

3.案例代码

pom

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>28.1-jre</version>
</dependency>

初始化缓存对象

  private static LoadingCache<String, Optional<TaskConfigure>> taskCache = CacheBuilder.newBuilder()
    .maximumSize(10000)
    .expireAfterWrite(10, TimeUnit.DAYS)
    .build(new CacheLoader<String, Optional<TaskConfigure>>() {
      @Override
      public Optional<TaskConfigure> load(String key) {
        return Optional.empty();
      }
    });

放入缓存

 taskCache.put(taskId, Optional.of(configure));

取出缓存

 taskCache.get(taskId).orElse(null);

 

登录后即可回复 登录 | 注册
    
关注编程学问公众号