Caffeine使用篇 - Eviction
文章目录
- 前言
- 一、基于大小
- 二、基于时间
- 三、基于引用
前言
Caffeine提供了三种驱逐策略 - 基于大小、基于时间、基于引用。
一、基于大小
使用固定大小的容量maximumSize或者maximumWeight,一旦超出将基于recently or very often(最近最少)策略,驱逐元素。
1. maximumSize
要求maximumSize与maximumWeight只能设置一个。此外,maximumSize必须大于0。
e.g.
Cache<Object, Object> cache = Caffeine.newBuilder().maximumSize(10).build();
List<Object> list = new ArrayList<>(100);
for (int i = 0; i < 100; i++) {cache.put(i, i);list.add(i);
}
Map<Object, Object> map = cache.getAllPresent(list);
map.forEach((k, v) -> {System.out.println(k + ":" + v);
})
System.out.println(cache.estimatedSize());
2. maximumWeight
要求maximumSize与maximumWeight只能设置一个。此外,maximumWeight必须大于0。
要求一个Caffeine实例只设置一个weigher(…)方法,maximumWeight必须设置。
e.g.
Cache<Object, Object> cache = Caffeine.newBuilder().maximumWeight(10).weigher(new Weigher<Object, Object>() {@Overridepublic @NonNegative int weigh(@NonNull Object key, @NonNull Object value) {if (value instanceof Integer) {Integer v = (Integer) value;return v;}return 0;}}).build();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {cache.put(i, i);list.add(i);
}Map<Object, Object> map = cache.getAllPresent(list);
map.forEach((k, v) -> {System.out.println(k + ":" + v);
});System.out.println(cache.estimatedSize());
二、基于时间
1. expireAfterAccess
在创建、更新、读取之后的一段时间剔除。
Cache.asMap().get(Object)、Cache.asMap().put(K, V)等方法会触发访问时间重置,但是Cache.asMap()方法不会。
e.g.
public class FakeTicker implements Ticker {private final AtomicLong nanos = new AtomicLong();public FakeTicker advance(long time, TimeUnit unit) {this.nanos.getAndAdd(unit.toNanos(time));return this;}// Returns the number of nanoseconds elapsed since this ticker's // fixed point of reference.@Overridepublic long read() {return this.nanos.get();}}
FakeTicker ticker = new FakeTicker();
Cache<Object, Object> cache = Caffeine.newBuilder().ticker(ticker).expireAfterAccess(Duration.ofSeconds(5)).build();
cache.put("hello", "world");
System.out.println(cache.getIfPresent("hello"));
fakeTicker.advance(5, TimeUnit.SECONDS);
System.out.println(cache.getIfPresent("hello"));
System.out.println(cache.estimatedSize());
2. expireAfterWrite
在创建、更新之后的一段时间剔除。
3. expireAfter
Expiry
可以返回Long.MAX_VALUE,表示不剔除的语义。
三、基于引用
Caffeine使用篇 - Eviction相关推荐
- Caffeine使用篇 - Cleanup
文章目录 前言 一.CleanUp 前言 默认情况下,在一个值失效之后,Caffeine没有自动或者立刻执行清理.驱逐值.相反,它在写操作之后或者读操作(写操作很少的情况)之后执行少量的维护工作.如果 ...
- Caffeine - Caches - Eviction
Caffeine - Caches - Eviction 剔除策略 基于容量的剔除 基于时间的剔除 基于引用的剔除 剔除策略 Caffeine提供了三种类型的提出方式:基于容量的剔除.基于时间的剔除和 ...
- Caffeine实战教程篇
[干货点] 该篇文章是前三篇文章Caffeine系列的总结,算是全网最全的实战教程了,每个知识点都有相关demo和应用场景,以及相关的坑,这些都一一声明了,看完该篇文章,你就能够入门Caffeine了 ...
- Caffeine Eviction策略
Caffeine缓存剔除策略有三个: 基于容量剔除 基于时间剔除 基于引用剔除 基于容量剔除 // 如果缓存的条目大于maximumSize值时,caffeine将尝试剔除最近或很少使用的缓存条目 L ...
- Caffeine本地缓存详解(一篇就明白)
结论:Caffeine 是目前性能最好的本地缓存,因此,在考虑使用本地缓存时,直接选择 Caffeine 即可. 先看一个小例子,明白如何创建一个 Caffeine 缓存实例. Caffeine ca ...
- Caffeine Cache~高性能 Java 本地缓存之王
前面刚说到Guava Cache,他的优点是封装了get,put操作:提供线程安全的缓存操作:提供过期策略:提供回收策略:缓存监控.当缓存的数据超过最大值时,使用LRU算法替换.这一篇我们将要谈到一个 ...
- 本地缓存之王-Caffeine
引言 随着业务体量的增长,使用的缓存方案一般会经过:1)无缓存直接查DB:2)数据同步+Redis:3)多级缓存 三个阶段. 第1阶段直接查DB只能用于小流量场景,随着QPS升高,需要引入缓存来减轻D ...
- 一文深入了解史上最强的Java堆内缓存框架Caffeine
它提供了一个近乎最佳的命中率.从性能上秒杀其他一堆进程内缓存框架,Spring5更是为了它放弃了使用多年的GuavaCache 缓存,在我们的日常开发中用的非常多,是我们应对各种性能问题支持高并发的一 ...
- Caffeine (史上最全)
文章很长,建议收藏起来,慢慢读! 备注:持续更新中- 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 + 涨薪必备 疯狂创客圈 ...
最新文章
- 记一个网络传输功能的实现过程
- 左斜杠和右斜杠有什么区别_「斜杠云」SEO推广和SEO优化有什么区别?
- 算法竞赛入门经典 第七章 总结
- Epic Games表示不服苹果垄断案裁决 继续提出上诉
- 数据结构 5-3-3 二叉树的线索化
- 条件控制语句 以及 循环语句
- html网页设计需求分析,网页设计需求分析方法
- 分布式光伏发电系统的组网与研究
- verilog 7段数码管译码器
- 图像处理​​​​​​​--十大经典算法
- UiBot 邮件群发
- 示例-Luat示例-MQTT
- 解决edge浏览器无法打开pdf文件问题
- 未来已来!阿里小蜜AI技术揭秘
- 最有价值证书——ITIL名列第三
- 关于Sublime text3 配置及插件整理
- 速卖通商品详情API接口(商品详情页面数据接口)
- js+css 灵活层叠 绝对/相对 定位 2
- openwrt STA+AP共存模式
- 反射(Reflection)
热门文章
- codeforces 1665A (GCD vs LCM)思维
- 纯电动汽车两档ATM变速箱simulink模型,模型实现了两档AMT换挡策略和换挡过程仿真
- Android面试必问!记录下我磕磕碰碰的三个月找工作经历,面试心得体会
- 磕磕碰碰搭建Nginx实现接口映射
- NR 5G 入网流程
- 校园网及入网计算机管理制度,校园网用户入网管理规定
- win10、win7系统64位oracle11g安装教程以及32位plsql连接教程
- Spring 微服务实战
- 统驭科目(Reconciliation account)
- 计算机选择u盘启动不了,win10系统u盘启动不了系统怎么办_win10无法进入u盘启动解决方法...