Guava Cache被淘汰?快来掌握最快本地缓存!

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

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

Caffeine提供了灵活的构造器去创建一个拥有下列特性的缓存:

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

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

1. 介绍

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

  • 高性能: Caffeine采用了多种性能优化策略,包括高效的数据结构和无锁算法,以实现卓越的性能表现。
  • 内存友好: Caffeine使用近似最近最少使用(LRU)算法,以确保缓存中的数据是最常用的数据,从而最大程度地减少内存占用。
  • 异步加载: Caffeine支持异步加载数据,可以有效地处理缓存未命中的情况,提高系统的响应速度。

2. 如何使用Caffeine

2.1 Maven 依赖

引入pom依赖:

<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应用程序,特别是对性能要求较高的系统。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM应用开发

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

#晒一晒我的offer#
全部评论

相关推荐

11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务