本地缓存(Local Cache)是指将常用的、固定的数据存储在应用程序的内存中(通常是 JVM 堆内存),以便快速访问。它是构建高性能系统的重要手段之一。
具备两大特点的数据:
-
数据量小
-
长时间不会发生变化。
像这样的数据,除了建立Redis缓存以外,还非常适合做本地缓存(Local Cache)。这样就可以形成多级缓存机制:
-
数据查询时优先查询本地缓存
-
本地缓存不存在,再查询Redis缓存
-
Redis不存在,再去查询数据库。
1. 什么是本地缓存
本地缓存是运行在单个应用程序中的缓存,数据存储在 JVM 内存中,避免了网络开销,提供极高的访问速度。
典型实现是利用 Java 的数据结构(如 HashMap
或 ConcurrentHashMap
),将数据直接存储在内存中。
2. 本地缓存的优缺点
2.1 优点
(1)访问速度快:数据存储在内存中,无需网络开销,读取速度极快。
2.2 缺点
(1)存储容量有限:受限于 JVM 可用内存,无法存储大量数据。
(2)无法共享:每个实例独立管理缓存,无法在分布式场景中共享。
(3)数据同步复杂:数据同步困难,一般采用自动过期方案。
本地缓存由于无需网络查询,速度非常快。不过由于上述缺点,本地缓存往往适用于数据量小、更新不频繁的数据。
3. Caffeine 构建本地缓存
Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。GitHub地址:https://github.com/ben-manes/caffeine
Caffeine 是一个高性能的 Java 本地缓存库,比手动实现更高效和可靠。以下是一个简单的 Caffeine 使用示例:
3.1 依赖引入
在 pom.xml
文件中添加依赖:
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.1.6</version>
</dependency>
3.2 代码示例
使用 Caffeine 实现本地缓存:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.concurrent.TimeUnit;
public class CaffeineCacheExample {
private final Cache<String, Object> cache = Caffeine.newBuilder()
.maximumSize(100) // 最大容量
.expireAfterWrite(10, TimeUnit.MINUTES) // 写入后10分钟过期
.build();
// 设置缓存
public void put(String key, Object value) {
cache.put(key, value);
}
// 获取缓存
public Object get(String key) {
return cache.getIfPresent(key);
}
// 删除缓存
public void remove(String key) {
cache.invalidate(key);
}
}
4. 总结
本地缓存在单机环境和高性能场景中非常有用,适合存储小而静态的数据。配合分布式缓存(如 Redis),可以构建多级缓存架构,有效提升系统性能并降低数据库压力。在实现本地缓存时,可以使用简单的 HashMap
或引入更高级的工具(如 Caffeine),根据业务需求选择适合的解决方案。