cacheManager .setCacheBuilder(CacheBuilder.newBuilder()//存活时间(30秒内没有被访问则被移除).expireAfterAccess(30, TimeUnit.SECONDS)//存活时间(写入10分钟后会自动移除).expireAfterWrite(10, TimeUnit.MINUTES)//最大size.maximumSize(1000)//最大并发量同时修改.concurrencyLevel(6)//初始化大小为100个键值...
// 遇到不存在的key,定义默认缓存值// 1. 在cache定义时设置通用缓存模版LoadingCache<Integer, String> cache1 = CacheBuilder.newBuilder().build(newCacheLoader<Integer, String>() {@OverridepublicStringload(Integer key)throwsException {return"hellokey"+ key; } } ); cache1.put(1,"a"); System.ou...
Guava提供了几个非常实用的组件,它们是CacheBuilder、LoadingCache、Cache和CacheLoader。这些组件共同工作,让咱们的缓存管理变得既灵活又高效。3.1 CacheBuilder 首先,让咱们看看CacheBuilder。这个类真是太棒了,它像个万能工具,帮你构建出各种定制的缓存。想要限制缓存大小?没问题。想要设置过期时间?一样行。它就像...
package com.geekarchitect.patterns.singleton.demo02;import com.geekarchitect.patterns.singleton.demo01.ILocalCache;import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author 极客架构师@吴念 * @createTime 2022...
@Test public void testCache() throws ExecutionException, InterruptedException { CacheLoader cacheLoader = new CacheLoader<String, Animal>() { // 如果找不到元素,会调用这里 @Override public Animal load(String s) { return null; } }; LoadingCache<String, Animal> loadingCache = CacheBuilder.newBuilde...
CacheBuilder.weakKeys():使用弱引用存储键。当键没有其它(强或软)引用时,缓存项可以被垃圾回收。因为垃圾回收仅 依赖恒等式(==),使用弱引用键的缓存用==而不是equals比较键。 CacheBuilder.weakValues():使用弱引用存储值。当值没有其它(强或软)引用时,缓存项可以被垃圾回收。因为垃圾回收仅 依赖恒等式(==)...
使用CacheBuilder来构建cache,可以通过maximumSize()方法设置缓存的最大大小。当缓存大小达到最大值时,新添加的元素将会使最近最少使用的元素失效。 2.设置缓存的过期时间 可以使用expireAfterAccess()和expireAfterWrite()方法来设置缓存的过期时间。expireAfterAccess()表示当缓存项在指定的时间段内没有被读或写访问时...
Cache<String,String>cache=CacheBuilder.newBuilder().expireAfterAccess(1,TimeUnit.HOURS)// 设置缓存条目在1小时内没有被访问后被移除.maximumSize(100)// 设置缓存的最大容量为100.build(); 通过合理地设置缓存淘汰策略,可以避免缓存中存储过多的无用数据,提高缓存的效率和性能。
这意味着你可以使用一个简单的`CacheBuilder`来创建一个缓存,然后使用装饰器来添加额外的功能,如引用计数、并发安全等。 6.线程安全:Guava缓存是线程安全的。这意味着多个线程可以同时访问和修改缓存,而不会导致数据不一致或竞态条件。 7. LRU策略:Guava缓存还支持LRU(最近最少使用)策略。当缓存满了,Guava会自动...
要线程安全地更新LoadingCache的value,可以按照以下步骤进行操作: 创建一个LoadingCache对象: 代码语言:txt 复制 LoadingCache<Key, Value> cache = CacheBuilder.newBuilder() .build(new CacheLoader<Key, Value>() { public Value load(Key key) throws Exception { // 加载缓存项的逻辑 return loadValue(k...