企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Guava Cache只提供堆缓存,小巧灵活,性能最好,如果只使用堆缓存,那么使用它就够了。 ``` Cache<String, String> myCache = CacheBuilder.newBuilder().concurrencyLevel(4).expireAfterWrite(10, TimeUnit.SECONDS).maximumSize(10000).build(); ``` 然后可以通过put、getIfPresent 来读写缓存。CacheBuilder有几类参数:缓存回收策略、并发设置等。 1. 缓存回收策略/基于容量 maximumSize:设置缓存的容量,当超出maximumSize时,按照LRU进行缓存回收 2. 缓存回收策略/基于时间 * expireAfterWrite:设置TTL,缓存数据在给定的时间内没有写(创建/覆盖)时,则被回收,即定期的会回收缓存数据。 * expireAfterAccess:设置TTI,缓存数据在给定的时间内没有读/写时,则被回收。每次访问时,都会更新它的TTI,从而如果该缓存是非常热的数据,则将一直不过期,可能会导致脏数据存在很长时间(因此,建议设置expireAfterWrite)。 3. 缓存回收策略/基于Java对象引用 weakKeys/weakValues:设置弱引用缓存。 softValues:设置软引用缓存。 4. 缓存回收策略/主动失效 invalidate(Object key)/invalidateAll(Iterablekeys)/invalidateAll():主动失效某些缓存数据。 什么时候触发失效呢? Guava Cache不会在缓存数据失效时立即触发回收操作(如果要这么做,则需要有额外的线程来进行清理),是在PUT时会主动进行一次清理缓存,当然读者也可以根据实际业务通过自己设计线程来调用cleanUp方法进行清理。 5. 并发级别 concurrencyLevel:Guava Cache重写了ConcurrentHashMap,concurrencyLevel用来设置Segment数量,concurrencyLevel越大并发能力越强。 6. 统计命中率 recordStats:启动记录统计信息,比如命中率等