Guava Cache_谷歌工具包 缓存

下面来看一下谷歌工具包的Cache是怎么做的,下面一个简单的demo,缓存的部分参数解释如下:

  • initialCapacity:初始容量,默认值16;
  • concurrencyLevel:并发控制级别,可以同时写缓存的线程数,默认值4;
  • maximumSize:缓存最多可以放多少个元素;
  • maximumWeight:指定缓存可能包含的项的最大权重。使用#weiger指定的称重器确定重量,使用此方法需要在调用#build之前对#weiger进行相应的调用;
  • weigher:能够决定缓存中实体对象的权重;
  • expireAfterAccessNanos:指定在条目创建、最近一次替换其值或最后一次访问后经过固定的持续时间后,应自动从缓存中删除每个条目;所有缓存读写操作(包括cache.asMap())都会重置访问时间。获取(对象)和缓存。
  • expireAfterWriteNanos:指定在创建条目或最近替换其值后经过固定的持续时间后,应自动从缓存中删除每个条目;
  • refreshNanos:刷新时间;
  • keyEquivalence:设置用于比较键的自定义等效策略;
  • valueEquivalence:设置用于比较值的自定义等效策略;
  • removalListener:设置缓存的移除通知,通过重写onRemoval方法实现。
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

import java.util.concurrent.TimeUnit;

public class CacheBuilderDemo {
    private static final int EXPIRE_TIME = 2;

    private static final int MAXIMUM_SIZE = 2;

    private static final long SLEEP_TIME = 1000;

    /**
     * maximumSize 当缓存达到其最大大小maximumSize时,最早的值将被逐出。默认驱逐策略——LRU(Least Recently Used)
     */
    private static final Cache<String, String> CACHE = CacheBuilder.newBuilder()
            .expireAfterAccess(EXPIRE_TIME, TimeUnit.SECONDS)
            .maximumSize(MAXIMUM_SIZE)
            .build();

    public static void main(String[] args) throws InterruptedException {
        CACHE.put("test", "hello world!");
        CACHE.put("test1", "hello world! ok");
        Thread.sleep(SLEEP_TIME);
        System.out.println(CACHE.getIfPresent("test"));
    }
}

它使用了建造者设计模式,利用CacheBuilder中间对象去传入值,使用build方法去实例化对象,build方法不会更改此CacheBuilder实例的状态,因此可以再次调用它以创建多个独立缓存。

@GwtCompatible(emulated = true)
public final class CacheBuilder<K, V> {
  private static final int DEFAULT_INITIAL_CAPACITY = 16;
  private static final int DEFAULT_CONCURRENCY_LEVEL = 4;
  private static final int DEFAULT_EXPIRATION_NANOS = 0;
  private static final int DEFAULT_REFRESH_NANOS = 0;
  private static final Logger logger = Logger.getLogger(CacheBuilder.class.getName());
int initialCapacity = UNSET_INT;
  int concurrencyLevel = UNSET_INT;
  long maximumSize = UNSET_INT;
  long maximumWeight = UNSET_INT;
  Weigher<? super K, ? super V> weigher;

  Strength keyStrength;
  Strength valueStrength;

  long expireAfterWriteNanos = UNSET_INT;
  long expireAfterAccessNanos = UNSET_INT;
  long refreshNanos = UNSET_INT;
  public static CacheBuilder<Object, Object> newBuilder() {
    return new CacheBuilder<Object, Object>();
  }
  ... ...
  public <K1 extends K, V1 extends V> LoadingCache<K1, V1> build(
      CacheLoader<? super K1, V1> loader) {
    checkWeightWithWeigher();
    return new LocalCache.LocalLoadingCache<K1, V1>(this, loader);
  }
}

其他Cache

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。使用方法与Guava/Caffeinecache类似。

参考链接:

1、com.google.common.cache.CacheBuilder.weigher()方法的使用及代码示例_其他_NULL123方法的使用及代码示例_其他_NULL123")

2、JetCache官网教程 - 开源资源分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值