Guava在实际的java后端项目中应用的场景还是比较多的,比如限流,缓存,容器操作之类的,有挺多实用的工具类,这里记录一下,在使用GuavaCache,返回null的一个问题 I. 常见使用姿势 @Test public void testGuava() { LoadingCachecache = CacheBuilder.newBuilder().build(new CacheLoader() { @Override public String lo...
@Testpublic void testGuava() {LoadingCache<String, String> cache = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() {@Overridepublic String load(String key) throws Exception {if ("hello".equals(key)) {return "word";}return null;}});String word = cache.getUnchecked("hello"...
user = cache.get(name, () -> {Uservalue=query(key);//from databse, disk, etc.returnvalue; }); 或者使用LoadingCache: LoadingCache<String, User> cache = CacheBuilder.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES).build(newCacheLoader<String, User>() {@OverridepublicUserload(String name...
1publicclassStudyGuavaCache {2publicstaticvoidmain(String[] args)throwsInterruptedException {3Cache<String,String> cache =CacheBuilder.newBuilder()4.maximumSize(2)5.expireAfterAccess(3,TimeUnit.SECONDS)6.build();7cache.put("key1","value1");8inttime = 1;9while(true) {10Thread.sleep(time*100...
1. 最基础的例子[CacheBuilder] // 新建CacheBuilder Cache<Integer, String> cache = CacheBuilder.newBuilder().build(); cache.put(1, "a"); cache.put(2, "b"); System.out.println(cache.getIfPresent(1)); // 输出: a System.out.println(cache.getIfPresent(3)); // 输出: null System.out....
Cache<Integer, BigHeapObject> cache = CacheBuilder.newBuilder().recordStats() .expireAfterAccess(5, TimeUnit.SECONDS).build(); cache.put(1, new BigHeapObject(1)); System.out.println(cache.getIfPresent(1));//not null try { Thread.sleep(5000); ...
Cache<String, String> build = CacheBuilder.newBuilder().maximumSize(100).build(); //放入缓存 build.put("a","1"); //获取缓存,如果缓存不存在则返回一个null值 System.out.println(build.getIfPresent("a"));//1 //所有类型的Guava Cache,不管有没有自动加载功能,都支持get(K,Callable)方法,这个...
4.CacheLoader中异步加载的实现 4.1 检查入参loader和executor不能为null 4.2 调用loader.load(), 根据key加载值,load方法需要我们自己实现 当调用LoadingCache的get方法时,如果缓存不存在对应key的记录,则CacheLoader的load方法会被自动调用从外存加载数据,load方法的返回值会作为key对应的value存储到LoadingCache中,并从...
测试的时候发现项目中的LoadingCache没有刷新,但是明明调用了refresh方法了。后来发现LoadingCache是不支持缓存null值的,如果load回调方法返回null,则在ge...
测试的时候发现项目中的LoadingCache没有刷新,但是明明调用了refresh方法了。后来发现LoadingCache是不支持缓存null值的,如果load回调方法返回null,则在get的时候会抛出异常。 通过几个例子开看这个问题: public void test_loadNull() { LoadingCache<String, String> stringCache = CacheBuilder.newBuilder() ...