cache缓存的使用

Guava缓存机制详解

计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存

package com.google.guava;

import com.alibaba.fastjson.JSONObject;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

import java.util.concurrent.TimeUnit;

/**
 * @author : ♞Demons♛
 * @date : 2020-01-03 20:47
 * Description :计算或检索一个值的代价很高,
 * 并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存
 **/
public class TestGuavaCacheBuilder {

    private static LoadingCache<String, String> cache = CacheBuilder.newBuilder()
    		// 设置缓存的容量
            .maximumSize(100)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .build(new CacheLoader<String, String>() {
                @Override
                public String load(String appId) {
                	// 若缓存中无需要的数据,会执行以下方法
                    return queryUserInfoById(appId);
                }
            });

    public static void main(String[] args) throws Exception {
    	// 首次查询缓存
        System.out.println(cache.get("1"));
        Thread.sleep(1000L);
        // 再次查询缓存
        System.out.println(cache.get("1"));
    }

    private static String queryUserInfoById(String appId) {
        System.out.println("get user info from this method");
        JSONObject userInfo = new JSONObject();
        userInfo.put("1", "admin");
        userInfo.put("2", "test");
        return userInfo.getString(appId);
    }
}
运行结果:
get user info from this method
admin
admin

Process finished with exit code 0

可以看到程序在第一次通过appId获取userInfo时调用了方法,第二次获取时并未调用方法,而是走的缓存

  • 三种基于时间的清理或刷新缓存数据的方式:
    expireAfterAccess:当缓存项在指定的时间段内没有被读或写就会被回收
    expireAfterWrite:当缓存项在指定的时间段内没有更新就会被回收
    refreshAfterWrite:当缓存项上一次更新操作之后的多久会被刷新
  • 之前常用集合来做缓存,那它们有什么区别呢?
    Guava Cache与集合很相似,但也不完全一样;最基本的区别是集合会一直保存所有添加的元素,直到显式地移除.相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素,可设置过期时间.在某些场景下,尽管LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值