Guava在实际的java后端项目中应用的场景还是比较多的,比如限流,缓存,容器操作之类的,有挺多实用的工具类,这里记录一下,在使用GuavaCache,返回null的一个问题 I. 常见使用姿势 @Test public void testGuava() { LoadingCachecache = CacheBuilder.newBuilder().build(new CacheLoader() { @Override public String lo...
publicLoadingCache<String,User>createUserCache(){returnCacheBuilder.newBuilder().build(newCacheLoader<String,User>(){@OverridepublicUserload(Stringkey)throwsException{System.out.println(key+"用户缓存不存在,尝试CacheLoader回源查找并回填...");returnuserDao.getUser(key);}});} 这样,获取不到数据的时候...
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...
@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"...
在上述示例中,我们使用CacheBuilder来创建Guava Cache,并通过.build(new ProductCacheLoader())指定了CacheLoader来加载数据。 获取缓存数据 在业务代码中,我们可以通过Guava Cache来获取商品信息。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 Product product=productCache.get(productId); ...
不同的缓存项有不同的“权重”(weights),你可以使用``CacheBuilder.weigher(Weigher)指定一个权重函数,并且用CacheBuilder.maximumWeight(long)`指定最大总重. 存储原理: Segment数组 + ReferenceEntry数组(AtomicReferenceArray) + 链表(ReferenceEntry)(注意:和JDK7的ConcurrentHashMap类似,见文章:https://www.cnblogs....
测试的时候发现项目中的LoadingCache没有刷新,但是明明调用了refresh方法了。后来发现LoadingCache是不支持缓存null值的,如果load回调方法返回null,则在get的时候会抛出异常。 通过几个例子开看这个问题: public void test_loadNull() { LoadingCache<String, String> stringCache = CacheBuilder.newBuilder() ...
cacheBuilder.set(cacheKey, goodsVO); GoodsVO goodsVO1 = cacheBuilder.get(cacheKey); Assert.assertNotNull(goodsVO1); version = cacheBuilder.resetCacheVersion(); System.out.println(String.format("重置后的缓存版本:%s", version)); cacheKey = cacheBuilder.generateVerKey("goods112233"); cacheBuilder...
loadingCache = CacheBuilder.newBuilder().maximumSize(1).build(cacheLoader); } //获取数据,如果不存在返回null public Man getIfPresentloadingCache(String key){ return loadingCache.getIfPresent(key); } //获取数据,如果数据不存在则通过cacheLoader获取数据,缓存并返回 ...
privateLoadingCache<String,User>cache=CacheBuilder.newBuilder() //省略 .build(newCacheLoader<String,User>(){ @Override publicUserload(Stringkey)throwsException{ LOGGER.info("{}load{}",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss")),key); ...