Guava缓存的使用

适用于

你愿意消耗一些内存空间来提升速度。
你预料到某些键会被查询一次以上。
缓存中存放的数据总量不会超出内存容量。

cacheLoader方式

//这种方式的返回值不能为null,会报异常
//这种方式使用get方法来获取缓存的值
//使用put赋值缓存,put里面传入的是缓存的key和入参,value值是load方法返回值

public void testLoadingCache() throws Exception {
    //标红的是入参和返回值
    LoadingCache<String, String> cahceBuilder = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() {
        @Override
        public String load(String key) throws Exception {
            System.out.println("请求的key为" + key + "在缓存中不存在,通过load方法获取key."); String strProValue = "hello " + key + "!";
            return strProValue;
        }
    }); 
    System.out.println("a value:" + cahceBuilder.get("a"));
    cahceBuilder.put("b", "bbbb");
}
callable callback方式

//这种方式更加的灵活。可以在要使用的时候直接get
//这种方式使用getIfPresent方法来获取缓存的值

public void testcallableCache() throws Exception {
    Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(1000).build();
    String resultVal = cache.get("a", new Callable<String>() {
        public String call() {
            String strProValue = "hello " + "a" + "!";
            return strProValue;
        }
    });
    System.out.println("a value : " + resultVal);

    resultVal = cache.getIfPresent("b");
    System.out.println("a value : " + resultVal);
}
回收的参数:

1. 大小的设置:CacheBuilder.maximumSize(long) CacheBuilder.weigher(Weigher) CacheBuilder.maxumumWeigher(long)
  2. 时间:expireAfterAccess(long, TimeUnit) expireAfterWrite(long, TimeUnit)
  3. 引用:CacheBuilder.weakKeys() CacheBuilder.weakValues() CacheBuilder.softValues()
  4. 明确的删除:invalidate(key) invalidateAll(keys) invalidateAll()
  5. 删除监听器:CacheBuilder.removalListener(RemovalListener)

refresh机制:

1. LoadingCache.refresh(K) 在生成新的value的时候,旧的value依然会被使用。
  2. CacheLoader.reload(K, V) 生成新的value过程中允许使用旧的value
  3. CacheBuilder.refreshAfterWrite(long, TimeUnit) 自动刷新cache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值