美文网首页
Cache之Caffeine

Cache之Caffeine

作者: 程序员驿站 | 来源:发表于2017-12-25 14:01 被阅读1260次
    下载.jpeg

    背景

    Spring5已经将guava的cached放弃掉,使用Caffeine,为什么呢?即使spring组织放弃guava使用caffeine 是有道理的,那我们看看caffeine有什么优点,到底比guava的cache好在哪里?

    定义

    Caffeine(咖啡因) Caffeine 是基于 Java 8 的高性能,接近最佳的缓存库.
    了解更多
    提供了内存缓存受到了guava Api缓存的启发,是在guava的缓存和ConcurrentLinkedHashMap基础上改进的
    此外,咖啡因还提供了以下的扩展:

    • JCache
    • guava缓存的适配器
    • Simulator

    特性

    • 咖啡因缓存具有以下特性的:
    • 自动加载实体到缓存,可选异步
    • 以大小为基础逐出,当超过最大值基于频率和近因
    • 以时间为基础的条目过期
    • 异步刷新
    • 在弱引用中自动封装的键
    • 在弱引用中或软引用中自动封装的键
    • 通知被驱逐(其他方式删除)的条目
    • 传播到外部资源的写入
    • 统计缓存访问数据

    性能测试

    号称性能最好
    https://github.com/ben-manes/caffeine/wiki/Benchmarks

    如何使用

    maven 引用配置

    <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>2.6.0</version>
    </dependency>
    
    
    LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
        .maximumSize(10_000)
        .expireAfterWrite(5, TimeUnit.MINUTES)
        .refreshAfterWrite(1, TimeUnit.MINUTES)
        .build(key -> createExpensiveGraph(key));
    

    功能

    加载策略

    三种类型的填充策略: 手动、同步加载和异步加载

    驱除策略

    三种类型的驱逐:基于规模的驱逐,基于时间的驱逐和基于引用的驱逐

    原理

    问题

    那么caffeine是如何实现的,性能这么高
    未完待续。。。

    参考文献

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

    相关文章

      网友评论

          本文标题:Cache之Caffeine

          本文链接:https://www.haomeiwen.com/subject/ieslgxtx.html