高性能Java缓存库,专注于提供快速、高效的本地缓存解决方案。本文将深入探讨Caffeine的一些关键特性、用法和性能优化。基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。

缓存和ConcurrentMap有点相似,但有区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素,直到它们被从缓存当中手动移除。但Caffeine的缓存Cache 通常会被配置成自动驱逐缓存中元素,以限制其内存占用。在某些场景下,LoadingCacheAsyncLoadingCache 因为其自动加载缓存的能力将会变得非常实用。

和 redis 一样,默认都是被动淘汰,毕竟主动淘汰就有额外性能开销。

灵活构造器创建拥有下列特性的缓存:

为了提高集成度,扩展模块提供了JSR-107 JCacheGuava适配器。JSR-107规范了基于Java 6的API,在牺牲了功能和性能的代价下使代码更加规范。Guava的Cache是Caffeine的原型库并且Caffeine提供了适配器以供简单的迁移策略。

我们很欢迎你的贡献。请阅读设计部分,贡献指南开发路线图

1. 介绍

Caffeine是由Ben Manes创建的一款开源缓存库,它具有以下特性:

  • 高性能: Caffeine采用了多种性能优化策略,包括高效的数据结构和无锁算法,以实现卓越的性能表现。

  • 内存友好: Caffeine使用近似最近最少使用(LRU)算法,以确保缓存中的数据是最常用的数据,从而最大程度地减少内存占用。

  • 异步加载: Caffeine支持异步加载数据,可以有效地处理缓存未命中的情况,提高系统的响应速度。

2. 使用

2.1 导入依赖

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.1.6</version> <!-- 使用最新版本 -->
</dependency>

或者直接观察当前 SpringBoot 自带版本:

2.2 基本用法

import com.github.benmanes.caffeine.cache.Caffeine;

public class CaffeineExample {

    public static void main(String[] args) {
        // 创建一个缓存实例
        Caffeine<String, String> caffeineCache = Caffeine.newBuilder().build();

        // 向缓存中放入数据
        caffeineCache.put("公众号", "JavaEdge");

        // 从缓存中获取数据
        String value = caffeineCache.getIfPresent("公众号");
        System.out.println("Value for 公众号: " + value);
    }
}

3 高级用法

3.1 自定义缓存策略

通过expireAfterWriteexpireAfterAccess等方法自定义缓存项的过期策略。

Caffeine<String, String> caffeineCache = Caffeine.newBuilder()
        .expireAfterWrite(10, TimeUnit.MINUTES)
        .build();

3.2 异步加载

Caffeine<String, CompletableFuture<String>> caffeineCache = Caffeine.newBuilder()
        .buildAsync(key -> CompletableFuture.supplyAsync(() -> loadDataFromDatabase(key)));

4 性能调优

根据实际需求 ß配置,例如缓存的最大大小、刷新策略。

Caffeine<String, String> caffeineCache = Caffeine.newBuilder()
        .maximumSize(1000)
        .recordStats() // 启用统计信息
        .build();

5 总结

通过本文深入了解了Caffeine缓存库的基本用法、高级用法和性能调优选项。Caffeine是一个功能强大且易于使用的缓存库,适用于各种Java应用程序,特别是对性能要求较高的系统。

参考:

  • 官方文档
  • https:///ben-manes/caffeine/wiki/Roadmap-zh-CN
  • https:///ben-manes/caffeine