Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast

news2025/6/7 2:18:23

一、Spring Boot缓存架构核心

Spring Boot通过spring-boot-starter-cache提供统一的缓存抽象层:

业务代码
Cache Abstraction
CacheManager
Cache Implementation
Ehcache
Caffeine
Redis
Hazelcast

二、主流缓存工具深度对比

特性EhcacheCaffeineRedisHazelcast
类型本地缓存本地缓存分布式缓存分布式内存网格
性能纳秒级访问微秒级(最优本地缓存)毫秒级(网络延迟影响)毫秒级(分布式优化)
存储方式堆内/堆外/磁盘纯堆内内存+持久化分区内存+备份
集群支持有限(需企业版)不支持原生支持原生支持
数据一致性节点独立节点独立强一致性最终一致性
内存管理复杂(多级存储)简单(LRU/W-TinyLFU)服务端管理分布式管理
适用数据规模GB级GB级TB级TB级
学习曲线中等简单中等陡峭

三、简易案例实现

1. Caffeine本地缓存(高性能场景首选)
// 配置类
@Configuration
@EnableCaching
public class CacheConfig {
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager manager = new CaffeineCacheManager();
        manager.setCaffeine(Caffeine.newBuilder()
                .maximumSize(10_000)
                .expireAfterWrite(10, TimeUnit.MINUTES)
                .recordStats());
        return manager;
    }
}

// 服务层
@Service
public class ProductService {
    @Cacheable(value = "products", key = "#id", unless = "#result.price > 1000")
    public Product getProduct(Long id) {
        // 数据库查询逻辑
    }
    
    @CacheEvict(value = "products", key = "#id")
    public void updateProduct(Product product) {
        // 更新逻辑
    }
}
2. Redis分布式缓存(集群场景)
// 配置类
@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofHours(1))
                .serializeValuesWith(SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<>(Product.class)));
        
        return RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
    }
}

// 服务层(注解使用方式与本地缓存一致)
@Cacheable(value = "global_products", key = "#id")
public Product getGlobalProduct(Long id) { ... }

四、使用场景分析

1. 本地缓存适用场景
  • 高频访问的只读数据(如配置信息)
  • 数据一致性要求不高
  • 需要纳秒级响应(如实时竞价系统)
  • 单机QPS > 10,000的场景

性能对比

barChart
    title 本地缓存QPS对比
    x-axis 缓存类型
    y-axis QPS(万)
    series 性能
    data
        Caffeine 45
        Ehcache 38
        Guava 42
        Simple 0.5
2. 分布式缓存适用场景
  • 多服务实例共享数据
  • 会话集群管理
  • 跨服务数据一致性要求高
  • 缓存数据量超过单机内存

典型架构

Service A
Redis Cluster
Service B
Service C
持久化存储

五、技术选型决策树

小于1GB
大于1GB
极高性能
需要堆外存储
需要强一致性
需要内存计算
需要缓存?
数据规模
性能要求
分布式需求
Caffeine
Ehcache
Redis
Hazelcast

六、高级特性对比

高级功能EhcacheCaffeineRedisHazelcast
缓存穿透防护有限支持LoadingCacheBloom Filter原生支持
缓存预热手动手动脚本支持自动加载
监控管理JMX/StatisticMicrometerRedisInsight管理中心
持久化磁盘持久化RDB/AOF分布式持久化
事务支持不支持不支持有限支持ACID事务

七、性能优化实践

  1. 本地缓存优化

    • 使用Caffeine的异步刷新:
      Caffeine.newBuilder()
          .refreshAfterWrite(1, TimeUnit.MINUTES)
          .buildAsync(key -> loadData(key));
      
    • 合理设置最大尺寸防止OOM
    • 使用软引用优化GC
  2. Redis优化

    • Pipeline批量操作
    • Lua脚本保证原子性
    • 合理选择数据结构(Hash vs String)
    • 集群分片避免热点Key
  3. 混合缓存策略

    @Caching(cacheable = {
        @Cacheable(value = "local_cache", key = "#id"),
        @Cacheable(value = "redis_cache", key = "#id")
    })
    public Product getProduct(Long id) {
        // DB查询
    }
    

八、监控与故障排查

  1. 监控指标

    • 命中率(Hit Ratio)
    • 平均加载时间
    • 缓存大小
    • 回收次数
  2. 诊断工具

    • Spring Boot Actuator:/actuator/caches
    • Ehcache:CacheStatistics
    • Redis:INFO命令
    • Hazelcast:Management Center

九、技术选型建议矩阵

场景首选方案备选方案不推荐方案
高并发配置读取CaffeineEhcacheRedis
分布式会话管理RedisHazelcastEhcache
金融交易缓存HazelcastRedis本地缓存
大数据量缓存(10TB+)Redis集群Hazelcast本地缓存
实时分析中间结果CaffeineEhcacheRedis

十、未来趋势

  1. 分层缓存架构:本地缓存+分布式缓存混合使用
  2. 智能缓存:基于机器学习预测缓存策略
  3. 持久内存缓存:Optane PMem等新技术应用
  4. Serverless缓存:云原生缓存服务集成

最佳实践总结

  • 优先考虑Caffeine作为本地缓存方案
  • 分布式场景首选Redis
  • 复杂计算场景考虑Hazelcast
  • Ehcache适用于需要多级存储的特殊场景
  • 使用Spring Cache抽象层保证可移植性
  • 监控指标驱动缓存策略优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何有效删除 iPhone 上的所有内容?

“在出售我的 iPhone 之前&#xff0c;我该如何清除它&#xff1f;我担心如果我卖掉它&#xff0c;有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后&#xff0c;你如何处理旧 iPhone&#xff1f;你打算出售、以旧换新还是捐赠&#xff1f;无论你选择哪一款&am…

AI大模型学习三十二、飞桨AI studio 部署 免费Qwen3-235B与Qwen3-32B,并导入dify应用

一、说明 ‌Qwen3-235B 和 Qwen3-32B 的主要区别在于它们的参数规模和应用场景。‌ 参数规模 ‌Qwen3-235B‌&#xff1a;总参数量为2350亿&#xff0c;激活参数量为220亿‌。‌Qwen3-32B‌&#xff1a;总参数量为320亿‌。 应用场景 ‌Qwen3-235B‌&#xff1a;作为旗舰模型&a…

操作系统中的设备管理,Linux下的I/O

1. I/O软件分层 I/O 层次结构分为五层&#xff1a; 用户层 I/O 软件设备独立性软件设备驱动程序中断处理程序硬件 其中&#xff0c;设备独立性软件、设备驱动程序、中断处理程序属于操作系统的内核部分&#xff0c;即“I/O 系统”&#xff0c;或称“I/O 核心子系统”。 2.用…

LabVIEW与Modbus/TCP温湿度监控系统

基于LabVIEW 开发平台与 Modbus/TCP 通信协议&#xff0c;设计一套适用于实验室环境的温湿度数据采集监控系统。通过上位机与高精度温湿度采集设备的远程通信&#xff0c;实现多设备温湿度数据的实时采集、存储、分析及报警功能&#xff0c;解决传统人工采集效率低、环境适应性…

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强 简介 GitHub MCP (Machine Coding Protocol) 是一种强大的工具,能够自动化代码生成、管理和分析,从而显著提升开发效率。本文将全面介绍 GitHub MCP 的安装、配置、使用以及如何将其融入您的工作流。 本文介绍两种…

自主设计一个DDS信号发生器

DDS发生器 DDS信号发生器是直接数字频率合成技术&#xff0c;采用直接数字频率合成(Direct Digital Synthesis&#xff0c;简称DDS)技术&#xff0c;把信号发生器的频率稳定度、准确度提高到与基准频率相同的水平&#xff0c;并且可以在很宽的频率范围内进行精细的频率调节。采…

鸿蒙UI(ArkUI-方舟UI框架)- 使用弹框

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文章目录 弹框概述使用弹出框(Dialog)弹出框概述不依赖UI组件的全局自定义弹出框(openCustomDialog)(推荐)生命周期自定义弹出框的打开与关闭更新自定义弹出框内容更新自定义弹出框的属性完整示例 基础自定义弹…

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2] 学习机器学习&#xff0c;需要学习如何预处理原始数据&#xff0c;这里用到pandas&#xff0c;将原始数据转换为张量格式的数据。 学习笔记(23): 机器学习之数据预处理Pandas和转换成张量格式[1]-CSDN博客 下面…

在不同型号的手机或平板上后台运行Aidlux

在不同型号的手机或平板上后台运行Aidlux 一、鸿蒙/HarmonyOS手机与平板 二、小米手机与平板 三、OPPO手机与平板 四、vivo手机与平板 一、鸿蒙/HarmonyOS手机与平板 &#xff08;系统版本有差异&#xff0c;但操作原理相通&#xff09; 第一步&#xff1a;点击设置——应用和…

【SSM】SpringBoot学习笔记1:SpringBoot快速入门

前言&#xff1a; 文章是系列学习笔记第9篇。基于黑马程序员课程完成&#xff0c;是笔者的学习笔记与心得总结&#xff0c;供自己和他人参考。笔记大部分是对黑马视频的归纳&#xff0c;少部分自己的理解&#xff0c;微量ai解释的内容&#xff08;ai部分会标出&#xff09;。 …

1.企业可观测性监控三大支柱及开源方案的横评对比

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] &#x1f4e2; 大家好&#xff0c;我是 WeiyiGeek&#xff0c;一名深耕安全运维开发&#xff08;SecOpsDev&#xff09;领域的技术从业者&#xff0c;致力于探索DevOps与安全的融合&#xff08;De…

双空间知识蒸馏用于大语言模型

Dual-Space Knowledge Distillation for Large Language Models 发表&#xff1a;EMNLP 2024 机构&#xff1a;Beijing Key Lab of Traffic Data Analysis and Mining 连接&#xff1a;https://aclanthology.org/2024.emnlp-main.1010.pdf 代码&#xff1a;GitHub - songmz…

OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建一个 基于最小特征值&#xff08;Minimum Eigenvalue&#xff09;的角点响应计算对象&#xff0c;这是另一种经典的角点检测方法&…

8天Python从入门到精通【itheima】-69~70(字符串的常见定义和操作+案例练习)

目录 69节-字符串的定义和操作 1.学习目标 2.数据容器视角下的字符串 3.字符串的下标索引 4.字符串是一个无法修改的数据容器 5.字符串的常用操作 【1】index方法 【2】replace方法&#xff1a;进过替换&#xff0c;得到一个新的字符串 【3】split方法&#xff1a;将字…

GC1809:高性能音频接收与转换芯片

GC1809 是一款高性能音频接收与转换芯片&#xff0c;适用于多种音频设备&#xff0c;如 A/V 接收器、多媒体音响设备、机顶盒等。本文将简要介绍该芯片的主要特性、性能参数及应用。 主要特性 多协议兼容&#xff1a;兼容 IEC60958、S/PDIF、EIAJ CP1201 和 AES3 协议。 多种…

项目实战——C语言扫雷游戏

这是一款9*9的扫雷游戏 扫雷游戏 1.需求分析2.程序框架设计3.分函数实现打印游戏菜单界面游戏主逻辑函数程序主入口初始化游戏棋盘随机布置地雷显示当前棋盘状态计算指定位置周围的地雷数量玩家排雷主逻辑 4.分文件实现&#xff08;1&#xff09;test.c&#xff08;2&#xff0…

【Java】CopyOnWriteArrayList

一&#xff0c;概述 CopyOnWriteArrayList作为List接口的实现之一&#xff0c;它区分于ArrayList在于它是线程安全的。如它名字一样&#xff0c;所有的写操作均复制了原数组的值&#xff0c;虽说代价较大&#xff0c;但读多写少的环境下&#xff0c;是可接受的。笔者在此简单看…

C#入门学习笔记 #8(委托)

欢迎进入这篇文章,文章内容为学习C#过程中做的笔记,可能有些内容的逻辑衔接不是很连贯,但还是决定分享出来,由衷的希望可以帮助到你。 笔记内容会持续更新~~ 本章介绍C#中的委托,本章难度较大... 委托 C#中的委托是C语言、C++中函数指针的升级版。接下来介绍一个概念—…

CSS 3D 变换中z-index失效问题

CSS 3D 变换中 z-index 失效问题 1. z-index 失效了 在 CSS 中&#xff0c;z-index 通常用于控制元素的层叠顺序&#xff0c;数值越大&#xff0c;元素越靠前显示。在 3D 变换&#xff08;如 rotateX、translateZ&#xff09; 中使用 z-index 时&#xff0c;可能会发现z-inde…

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(七):消息框交互功能添加

Tailwind CSS 实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;一&#xff09; Tailwind CSS 实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;二&#xff09;&#xff1a;实现交互功能 Tailwind CSS 实战&#xff0c;基于 Kooboo 构建 AI 对话框页面&#x…