我是靠谱客的博主 敏感钢笔,最近开发中收集的这篇文章主要介绍caffeine java1.7_Caffeine高性能命中率近似最优的Java缓存库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Caffeine是一个基于Java 8的高性能缓存库,提供了近似最优的命中率。Caffeine类似ConcurrentMap但又很不一样,最本质的区别是ConcurrentMap的元素需要手动删除,而cache需要根据某种规则自动清除元素。

Caffeine主要特性:

自动加载元素到cache中,包含异步加载

基于数量的清除规则

基于时间的过期规则,从最后读或者最后写开始计时

异步刷新

Key自动封装为弱引用(weak references)

Value自动封装为弱引用或软引用(weak or soft references)

元素被清除时通知

读或写可以传播到外部资源,比如写Cache然后写db

Cache 统计,包含命中率,清除数和元素加载耗时

1、Cache的填充

手动填充

Cache cache = Caffeine.newBuilder()

.expireAfterWrite(10, TimeUnit.MINUTES)

.maximumSize(10_000)

.build();

Graph graph = cache.getIfPresent(key);

graph = cache.get(key, k -> createExpensiveGraph(key));

cache.put(key, graph);

cache.invalidate(key);

同步加载

LoadingCache cache = Caffeine.newBuilder()

.maximumSize(10_000)

.expireAfterWrite(10, TimeUnit.MINUTES)

.build(key -> createExpensiveGraph(key));

Graph graph = cache.get(key);

Map graphs = cache.getAll(keys);

异步加载

AsyncLoadingCache cache = Caffeine.newBuilder()

.maximumSize(10_000)

.expireAfterWrite(10, TimeUnit.MINUTES)

.buildAsync(key -> createExpensiveGraph(key));

CompletableFuture graph = cache.get(key);

CompletableFuture> graphs = cache.getAll(keys);

2、清除策略

基于数量,当超过最大个数限制时把最少使用或者最久没有使用清除

基于时间,可以设置清除距离最近一次读或写超过多长时间的元素

3、cache的删除

cache的删除(invalidate)和清除(eviction)的区别是,删除时调用出显示删掉,清除时cache根据某种策略自动删掉。

cache.invalidate(key)

cache.invalidateAll(keys)

cache.invalidateAll()

4、cache的刷新

cache的刷新指的是重新加载cache里面元素新的值,在异步加载过程中,如果获取cache会返回旧的时,直到加载完毕才返回新的值。

cache的刷新适用于需要定时刷新并加入cache的场景,比如榜单。

5、cache的存储或二级缓存

LoadingCache graphs = Caffeine.newBuilder()

.writer(new CacheWriter() {

@Override public void write(Key key, Graph graph) {

// 写入存储或者二级缓存

}

@Override public void delete(Key key, Graph graph, RemovalCause cause) {

// 从存储删除或者从二级缓存删除

}

})

.build(key -> createExpensiveGraph(key));

6、扩展

Caffeine提供JCache和Guava扩展

7、性能评测

读(75%)/写(25%)时

https://github.com/ben-manes/caffeine

最后

以上就是敏感钢笔为你收集整理的caffeine java1.7_Caffeine高性能命中率近似最优的Java缓存库的全部内容,希望文章能够帮你解决caffeine java1.7_Caffeine高性能命中率近似最优的Java缓存库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部