Commit 9872c420 authored by 刘凯's avatar 刘凯

添加caffenie测试

parent fda81b5c
...@@ -30,5 +30,7 @@ dependencies { ...@@ -30,5 +30,7 @@ dependencies {
compile("com.google.guava:guava:18.0") compile("com.google.guava:guava:18.0")
compile 'com.github.ben-manes.caffeine:caffeine:2.6.2'
} }
package com.example.demo.caffenie;
import com.github.benmanes.caffeine.cache.AsyncLoadingCache;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.CacheLoader;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import org.junit.Test;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* @author liukai
* @Description:
* @date 2018/12/177:39 PM
*/
public class CaffenieTest {
/**
* 同步加载写法,注意是LoadingCache
*
* 1.查询缓存不存在时会加载build里面的回调方法,并把非空的数据放入缓存
* 2.如果为空可以在回掉函数中写null,但是每次获取如果为空都会调用回调函数中的逻辑
*/
private LoadingCache<String, String> loadingCache = Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)
//cache的初始容量值
.initialCapacity(5)
//maximumSize用来控制cache的最大缓存数量,maximumSize和maximumWeight不可以同时使用
.maximumSize(100)
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return key;
}
});
/**
* 异步加载,注意是AsyncLoadingCache
* 1.查询缓存不存在时会加载build里面的回调方法,并把非空的数据放入缓存
* 2.如果为空可以在回掉函数中写null,但是每次获取如果为空都会调用回调函数中的逻辑
*/
private AsyncLoadingCache<String, String> asyncLoadingCache = Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)
//cache的初始容量值
.initialCapacity(5)
//maximumSize用来控制cache的最大缓存数量,maximumSize和maximumWeight不可以同时使用
.maximumSize(100)
.buildAsync(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return key;
}
});
/**
* 手动加载,注意是Cache
* 如果缓存中不存在该键,则调用这个 Function 函数,并将返回值作为该缓存的值插入缓存中。
* get 方法是以阻塞方式执行调用,即使多个线程同时请求该值也只会调用一次Function方法。
* 这样可以避免与其他线程的写入竞争,这也是为什么使用get优于getIfPresent的原因
*
* 1.查询缓存不存在时会加载build里面的回调方法,并把非空的数据放入缓存
* 2.如果为空可以在回掉函数中写null,但是每次获取如果为空都会调用回调函数中的逻辑
* 3.refreshAfterWrite 再次访问才能刷新,如果没人访问,那么永远也不会刷新
*/
private Cache<String, String> manualCache = Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)
.initialCapacity(5)
.maximumSize(100)
.build();
@Test
public void aaa(){
try {
String key = "name1";
CompletableFuture<String> completableFuture = asyncLoadingCache.get(key);
String a = completableFuture.get(1,TimeUnit.SECONDS);
System.out.println(a);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment