Caffeine 本地缓存

文章目录

  • [一、Caffeine 是什么?先立个世界观](#一、Caffeine 是什么?先立个世界观)
  • [二、Caffeine vs Redis(面试必问)](#二、Caffeine vs Redis(面试必问))
  • [三、引入依赖(Spring Boot)](#三、引入依赖(Spring Boot))
  • [四、最基础用法(纯 Java)](#四、最基础用法(纯 Java))
  • 五、进阶:自动加载缓存(强烈推荐)
      • [1️⃣ LoadingCache(同步)](#1️⃣ LoadingCache(同步))
      • [2️⃣ AsyncLoadingCache(异步)](#2️⃣ AsyncLoadingCache(异步))

一、Caffeine 是什么?先立个世界观

一句话定位:

Caffeine = 高性能 JVM 本地缓存库 ,主打极快 、线程安全 、自动淘汰。

它的灵感来自 Google Guava Cache,但性能和算法全面升级。

它解决什么问题?

  • 频繁查数据库 / RPC,响应慢

  • Redis 太远,本地就能解决的还要走网络

  • 一些热点数据(配置、字典、权限、用户信息)

不适合它的场景

  • 分布式共享数据

  • 需要持久化

  • 多节点强一致缓存

口诀 :

👉 "单机、热点、读多写少" = Caffeine 的主战场


二、Caffeine vs Redis(面试必问)

对比项 Caffeine Redis
存储位置 JVM 内存 独立服务
访问速度 纳秒级 毫秒级
分布式 ❌ ✅
重启丢失 ✅ ❌
适合场景 本地热点 全局共享

👉 最佳实践:

Caffeine + Redis 二级缓存(后面我会给你完整代码)


三、引入依赖(Spring Boot)

xml 复制代码
<dependency>
  <groupId>com.github.ben-manes.caffeine</groupId>
  <artifactId>caffeine</artifactId>
</dependency>

四、最基础用法(纯 Java)

java 复制代码
Cache<String, String> cache = Caffeine.newBuilder()
        .maximumSize(10_000)
        .expireAfterWrite(10, TimeUnit.MINUTES)
        .build();

// 写
cache.put("user:1", "张三");

// 读
String value = cache.getIfPresent("user:1");

核心参数解释

  • maximumSize:最大缓存条数(不是内存大小)

  • expireAfterWrite:写入后多久过期

  • expireAfterAccess:多久没访问就过期


五、进阶:自动加载缓存(强烈推荐)

1️⃣ LoadingCache(同步)

java 复制代码
LoadingCache<Long, User> userCache =
        Caffeine.newBuilder()
                .maximumSize(5000)
                .expireAfterWrite(30, TimeUnit.MINUTES)
                .build(userId -> {
                    // 缓存不存在时自动执行
                    return userService.getById(userId);
                });

// 自动加载
User user = userCache.get(1L);

✔ 好处

复制代码
防止缓存穿透

代码更干净

2️⃣ AsyncLoadingCache(异步)

java 复制代码
AsyncLoadingCache<Long, User> cache =
        Caffeine.newBuilder()
                .maximumSize(5000)
                .expireAfterWrite(10, TimeUnit.MINUTES)
                .buildAsync(id -> userService.getById(id));

// 返回 CompletableFuture
User user = cache.get(1L).get();

✔ 高并发 + IO 场景非常香


相关推荐
一枕槐安48711 小时前
RAG 服务扛住高并发:缓存、队列、限流三件套
java·spring·缓存·异步任务·rag·断路器
与数据交流的路上19 小时前
一次 redis 幽灵内存的分析
数据库·redis·缓存
Geek-Chow20 小时前
06 · DeepSeek V4.1 Flash 推理端到端走查:一个 Agent 请求穿过 recipe、KV 缓存、Prefill 与 Decode
缓存
前进的李工20 小时前
Agent 学习笔记 04:KV Cache 与上下文缓存
笔记·学习·缓存·agent·注意力机制·kv cache·prompt cache
John_Hui2 天前
第 5 篇:Ubuntu 安装 Redis
数据库·redis·缓存
l1t2 天前
DeepSeek总结的ALTER FUNCTION SET work_mem:无需全局更改即可修复 PostgreSQL 磁盘溢出
sql·缓存·postgresql
咖啡八杯2 天前
Redis 工具封装:RedisCache 对 Operations 体系的二次封装
java·数据库·redis·缓存·框架·springboot·若依
l1t2 天前
DeepSeek总结的PostgreSQL 中的 SQL 与 PL/pgSQL:计划缓存
sql·缓存·postgresql
hongyangcao2 天前
Cloudflare GLM-5.3 串号事故复盘:KV 缓存页记账错了一个字段,155 条回复答进了别人的会话
人工智能·缓存·ai