Caffeine介绍
Caffeine的简单使用
使用Caffeine加载数据有三种方式:
1、手动加载,也就是构建缓存的时候并不加载数据,在需要的时候再去加载并缓存
public static void main(String[] args) throws InterruptedException {
Cache<Object, Object> cache = Caffeine.newBuilder()
.expireAfterWrite(2000, TimeUnit.MILLISECONDS)
.maximumSize(10)
.build();
Function<Object, Object> func = (key) -> key + "_" + System.currentTimeMillis();
// 获取key,如果不存在则执行后面的func
Object key1 = cache.get("key1", func);
System.out.println(key1);
TimeUnit.SECONDS.sleep(3);
// 获取key,不存在则返回null
Object key11 = cache.getIfPresent("key1");
System.out.println(key11);
// 设置key
cache.put("key2", "value2");
System.out.println(cache.get("key2", func));
// key过期
cache.invalidate("key2");
// 将缓存中的数据以key=value输出
System.out.println(cache.asMap());
}
2、同步加载,构建缓存的同时加载缓存数据
LoadingCache<Object, String> cache = Caffeine.newBuilder()
.expireAfterWrite(2, TimeUnit.SECONDS)
.maximumSize(10)
.build(key -> key + "-" + System.currentTimeMillis());
// 获取key,不存在则执行build里面的方法进行加载
System.out.println(cache.get("key1"));
3、异步加载
AsyncLoadingCache<String, Object> cache = Caffeine.newBuilder()
.expireAfterWrite(2, TimeUnit.SECONDS)
.buildAsync(key -> key + "-" + System.currentTimeMillis());
// 获取不存在的key时,会使用buildAsync()方法中的算法计算出value,存入缓存
// 异步获取的结果存放在CompletableFuture对象中,可以使用thenAccept()获取结果
CompletableFuture<Object> future = cache.get("key1");
future.thenAccept(o -> System.out.println(System.currentTimeMillis() + "-" + o));
TimeUnit.SECONDS.sleep(3);
// 不存在则返回null
CompletableFuture<Object> key2 = cache.getIfPresent("key2");
System.out.println(key2);