LoadingCache<String, String> cache = CacheBuilder.newBuilder().expireAfterAccess(1, TimeUnit.SECONDS).build(new CacheLoader<String, String>() { @Override public String load(String key) { return fetchValueFromServer(key); } }); cache.get("kirito"); assertEquals(1, cache.size()); cache.get...
Guava Cache的架构设计灵感ConcurrentHashMap,在简单场景中可以通过HashMap实现简单数据缓存,但如果要实现缓存随时间改变、存储的数据空间可控则缓存工具还是很有必要的。 Cache存储的是键值对的集合,不同时是还需要处理缓存过期、动态加载等算法逻辑,需要额外信息实现这些操作,对此根据面向对象的思想,还需要做方法与数据的...
CacheBuilder.softValues()使用软引用来存储值。以软引用方式引用的对象会根据内存需求以全局最近最少使用的方式进行垃圾回收。由于使用软引用可能会影响性能,我们通常建议使用更可预测的 maximum cache size 替代。使用 softValues() 将导致值使用(==)来比较,而不是 equals() 方法。 3.4、显式删除 在任何时候,你可...
(3)CacheBuilder.softValues():使用软引用存储值 清除什么时候发生? 也许这个问题有点奇怪,如果设置的存活时间为一分钟,难道不是一分钟后这个key就会立即清除掉吗?我们来分析一下如果要实现这个功能,那Cache中就必须存在线程来进行周期性地检查、清除等工作,很多cache如redis、ehcache都是这样实现的。注意 redis使用了...
public class GuavaCacheService { public void setCache() { LoadingCache<Integer, String> cache = CacheBuilder.newBuilder() //设置并发级别为8,并发级别是指可以同时写缓存的线程数 .concurrencyLevel(8) //设置缓存容器的初始容量为10 .initialCapacity(10) ...
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)方法,这个...
#softValues:打开value的软引用 #recordStats:开发统计功能 注意: expireAfterWrite和expireAfterAccess同时存在时,以expireAfterWrite为准。 maximumSize和maximumWeight不可以同时使用 weakValues和softValues不可以同时使用 注解 别着急,先简单了解一下@Cacheable,@CachePut,@CacheEvit ...
通过使用弱引用的键、或弱引用的值、或软引用的值,Guava Cache 可以把缓存设置为允许垃圾回收: CacheBuilder.weakKeys():使用弱引用存储键。当键没有其它(强或软)引用时,缓存项可以被垃圾回收。因为垃圾回收仅依赖恒等式(==),使用弱引用键的缓存用==而不是 equals 比较键。 CacheBuilder.weakValues():使用弱引...
下一步,我们来看一下,如何让我们的键具有弱引用---这样可以让垃圾回收器去回收那些不再引用的cache key。默认情况下,缓存键和缓存值都是具有强引用但是我们可以让我们的缓存使用弱引用来存储这些key: 弱键 5.软值soft value 通过使用softValues()方法,我们可以让垃圾收集器去收集我们的缓存值: 软...
Cache<String, String> cache = Caffeine.newBuilder() //过期时间 .expireAfterWrite(10, TimeUnit.MINUTES) //最大容量 .maximumSize(10_000) .build(); String key = "test"; // 查找一个缓存元素, 没有查找到的时候返回null String res = cache.get(key, k -> createValue(key)); ...