Skip to content
作者:daily5am创建:-更新:-
字数:预计阅读: 分钟访问量:--

本地缓存vs分布式缓存

AI生成声明: 本文档由AI辅助生成,旨在提供本地缓存和分布式缓存对比的完整指南。

本地缓存和分布式缓存各有优缺点,理解它们的区别和适用场景对于设计高性能系统至关重要。

核心问题

本地缓存

特点:

  • 存储在应用进程内存中
  • 访问速度快,延迟低
  • 容量有限
  • 单机缓存,不共享

常见实现:

  • Caffeine
  • Guava Cache
  • Ehcache

分布式缓存

特点:

  • 存储在独立的缓存服务中
  • 多机共享
  • 容量大
  • 网络延迟

常见实现:

  • Redis
  • Memcached
  • Hazelcast

对比分析

特性本地缓存分布式缓存
速度极快(内存访问)较快(网络访问)
容量有限(JVM内存)大(独立服务器)
一致性单机一致多机一致
可用性单点故障高可用
复杂度

使用场景

本地缓存适用场景

  1. 热点数据

    • 访问频率极高
    • 数据量小
    • 更新频率低
  2. 计算成本高

    • 复杂计算结果
    • 减少重复计算
  3. 临时数据

    • Session数据
    • 临时配置

分布式缓存适用场景

  1. 共享数据

    • 多机共享
    • 用户信息
    • 配置信息
  2. 大数据量

    • 超出本地内存
    • 商品信息
    • 订单数据
  3. 高可用要求

    • 不能丢失
    • 持久化需求

组合使用

多级缓存架构

L1: 本地缓存(Caffeine)
    ↓ 未命中
L2: 分布式缓存(Redis)
    ↓ 未命中
L3: 数据库

优势:

  • 兼顾速度和容量
  • 减少网络开销
  • 降低Redis压力

实现示例

java
public String getData(String key) {
    // L1: 本地缓存
    String value = localCache.get(key);
    if (value != null) {
        return value;
    }
    
    // L2: 分布式缓存
    value = redis.get(key);
    if (value != null) {
        localCache.put(key, value);
        return value;
    }
    
    // L3: 数据库
    value = database.get(key);
    if (value != null) {
        redis.set(key, value);
        localCache.put(key, value);
    }
    
    return value;
}

选择建议

  1. 只读热点数据

    • 优先使用本地缓存
    • 减少网络开销
  2. 需要共享的数据

    • 使用分布式缓存
    • 保证一致性
  3. 大数据量

    • 使用分布式缓存
    • 本地缓存容量有限
  4. 高性能要求

    • 多级缓存
    • 本地缓存 + 分布式缓存

常见面试题

  1. 本地缓存和分布式缓存的区别?

    • 存储位置不同
    • 访问速度不同
    • 容量和一致性不同
  2. 如何选择缓存方案?

    • 根据数据特点
    • 根据性能要求
    • 根据一致性要求
  3. 多级缓存的优势?

    • 兼顾速度和容量
    • 减少网络开销
    • 提高命中率