guava 缓存使用

如果想使用 缓存,但是又觉得 redis 这种nosql 网络开销大。
又想有缓存大小、过期时间这种特性。guava的cache是一个不错的选择。
下面通过两个demon 来展示下guava的缓存如何使用。

1. Cache

//创建 cache ,过期时间 2 s
Cache cache = CacheBuilder.newBuilder()
        .expireAfterWrite(2, TimeUnit.SECONDS)
        .build();
//向缓存中添加 数据 K V 形式
cache.put("hello","where are you");
// 获取 key = hello 的 值
System.out.println(cache.getIfPresent("hello"));
// 延迟3 秒
Thread.sleep(1000 * 3);
// return null if not present
System.out.println(cache.getIfPresent("hello"));

输出结果 如下,过期时间是2s,在3s后就没有数据了。

where are you
null

2. LoadingCache

LoadingCache 和 cache 的用法差不多,但是可以自定义load方法,当找不到key 时候可以定义如何加载

LoadingCache graphs = CacheBuilder.newBuilder()
                .maximumSize(1000)
                .expireAfterWrite(10, TimeUnit.SECONDS)
                .build(
                        new CacheLoader() {
                            @Override
                            public String load(String key) {
                                System.out.println("load key :" + key);
                                return key + " :value";
                            }
                        }
                );
System.out.println(graphs.getUnchecked("hello"));
System.out.println(graphs.getUnchecked("hello"));

结果如下,
第一次get时候通过load 方法加载,第二次get时候走的缓存。

load key :hello
hello :value
hello :value

你可能感兴趣的:(guava 缓存使用)