Caffeine — 本地缓存

本地缓存(Local Cache)是指将常用的、固定的数据存储在应用程序的内存中(通常是 JVM 堆内存),以便快速访问。它是构建高性能系统的重要手段之一。

具备两大特点的数据:

  • 数据量小

  • 长时间不会发生变化。

像这样的数据,除了建立Redis缓存以外,还非常适合做本地缓存(Local Cache)。这样就可以形成多级缓存机制:

  • 数据查询时优先查询本地缓存

  • 本地缓存不存在,再查询Redis缓存

  • Redis不存在,再去查询数据库。

1. 什么是本地缓存

本地缓存是运行在单个应用程序中的缓存,数据存储在 JVM 内存中,避免了网络开销,提供极高的访问速度。
典型实现是利用 Java 的数据结构(如 HashMapConcurrentHashMap),将数据直接存储在内存中。

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),根据业务需求选择适合的解决方案。

猜你喜欢

转载自blog.csdn.net/qq_46637011/article/details/144061764
今日推荐