Caffeine 缓存:简介、优势及应用场景-四、Caffeine 的三级缓存

时间:2025-03-15 18:38:24

三级缓存 是现代应用中常见的一种缓存设计模式,它将缓存分为不同的层次,以提高系统的性能和容错能力。Caffeine 提供了与其他缓存层次(如 Redis)无缝集成的能力,从而支持三级缓存架构。

1. 三级缓存架构

三级缓存架构通常包括:

  • 本地缓存(L1):应用内的内存缓存,访问速度最快,但容量有限。Caffeine 在此层次上提供极高的性能。

  • 外部缓存(L2):如 Redis、Memcached 等外部缓存服务,适用于跨实例共享缓存的数据,提供更大的缓存容量。

  • 持久化存储(L3):数据库、分布式存储等,是最终的数据源。当数据不存在于 L1 和 L2 缓存中时,系统会从 L3 加载数据。

2. 三级缓存的实现

在 Caffeine 中,可以通过 Cache 接口结合 CacheLoaderWriter 实现本地缓存(L1)。对于外部缓存(L2),可以集成 Redis 等工具,在缓存未命中的情况下,查询外部缓存。最后,当 L1 和 L2 缓存都未命中时,可以回退到持久化存储(L3)。

 	/**
     * @description: 创建Caffeine 缓存实例
     * @param null
     * @return: null
     **/
    private static final Cache<String, Object> cache = Caffeine.newBuilder()
            .maximumSize(10000) // 最大缓存数量
            .expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存项过期时间
            .build();
	/**
     * @description: 存储缓存
     * @param key 缓存的 key
     * @param value 缓存的 value
     */
    public static void put(String key, Object value) {
        if (key != null && value != null) {
            cache.put(key, value);
        }
    }

    /**
     * @description: 从缓存中获取值
     * @param key 缓存的 key
     * @return: 返回缓存的 value
     */
    public static Object get(String key) {
        if (key == null) {
            return null;
        }
        return cache.getIfPresent(key);
    }
    

3. 三级缓存的优势

  • 高效存取:通过将热数据存储在 L1 缓存中,冷数据存储在 L2 缓存中,系统能够快速响应频繁请求,同时减少持久化存储的负载。

  • 容错性强:即使 L1 或 L2 缓存失效,系统仍然可以从其他层次获取数据,增强了系统的容错能力。

  • 数据一致性:可以通过合理的策略,确保不同层次之间的数据一致性,例如设置过期时间、清理机制等。