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

一、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 {@Beanpublic 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 {@Beanpublic 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的场景

性能对比

barCharttitle 本地缓存QPS对比x-axis 缓存类型y-axis QPS(万)series 性能dataCaffeine 45Ehcache 38Guava 42Simple 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.pswp.cn/web/82627.shtml

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

相关文章

【photoshop】专色浓度和专色密度

1.1 专色浓度 是图层填充到专色前&#xff0c;设置的前景色CMYK的K值。填充到专色后&#xff0c;可以查看到专色中图层的k值。 ps前景色填充快捷键 1.Windows 系统&#xff1a;Alt Delete&#xff1b;2.Mac 系统&#xff1a;Option Delete。 1.2专色密度 专色的属性&…

用电脑控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点&#xff1a; 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比&#xff0c;使用 14 位模数转换器 &#xff08;ADC&#xff09; 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS …

leetcode hot100刷题日记——33.二叉树的层序遍历

解题总结二维vector的初始化方法 题目描述情况1&#xff1a;不确定行数和列数情况2&#xff1a;已知行数和列数情况3&#xff1a;已知行数但不知道列数情况4&#xff1a;已知列数但不知道行数 题目描述 解答&#xff1a;用队列 思路都差不多&#xff0c;我觉得对于我自己来说&a…

微服务面试资料1

在当今快速发展的技术领域&#xff0c;微服务架构已经成为构建复杂系统的重要方式之一。本文将围绕微服务的核心概念、技术栈、分布式事务处理、微服务拆分与设计&#xff0c;以及敏捷开发实践等关键问题展开深入探讨&#xff0c;旨在为准备面试的 Java 开发者提供一份全面的复…

【设计模式-4.8】行为型——中介者模式

说明&#xff1a;本文介绍行为型设计模式之一的中介者模式 定义 中介者模式&#xff08;Mediator Pattern&#xff09;又叫作调节者模式或调停者模式。用一个中介对象封装一系列对象交互&#xff0c;中介者使各对象不需要显式地互相作用&#xff0c;从而使其耦合松散&#xf…

Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数

Oracle 的SEC_CASE_SENSITIVE_LOGON 参数 关键版本信息 SEC_CASE_SENSITIVE_LOGON 参数在以下版本中被弃用&#xff1a; Oracle 12c Release 1 (12.1)&#xff1a; 该参数首次被标记为"过时"(obsolete)但依然保持功能有效 Oracle 18c/19c 及更高版本&#xff1a; …

《图解技术体系》How Redis Architecture Evolves?

Redis架构的演进经历了多个关键阶段&#xff0c;从最初的内存数据库发展为支持分布式、多模型和持久化的高性能系统。以下为具体演进路径&#xff1a; 单线程模型与基础数据结构 Redis最初采用单线程架构&#xff0c;利用高效的I/O多路复用&#xff08;如epoll&#xff09;处…

【电赛培训课】测量与信号类赛题分析

一、赛题基本情况及硬件电路准备 &#xff08;一&#xff09;赛题基本情况 1.测量与信号类赛题统计 2.测量与信号类赛题特点 &#xff08;二&#xff09;硬件电路准备 综测环节不允许带入电脑和手机&#xff0c;需要自己根据题目要求和芯片参数指标进行设计和计算&#xff0c…

移动AI神器GPT Mobile:多模型自由切换

GPT Mobile是什么 GPT Mobile是一款开源的本地移动部署AI工具,主要用于安卓设备。以下是其相关介绍: 功能特点 多模型交互:支持与多个大型语言模型(LLM)同时进行对话,用户导入相应的API密钥,就可连接OpenAI、Anthropic、Google、Ollama等平台,还能根据需求自由切换不同…

AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景

在实际的开发过程中很少会只用 AirSim 自带的 Blocks 场景&#xff0c;通常需要用到自定义的一些环境和模型&#xff0c;依托于强大的 UE 引擎可以较为逼真地完成场景渲染。这篇博客记录了如何从头开始导入一个自定义场景并加载 AirSim 插件。 【Note】&#xff1a;由于 UE Ed…

GPU 图形计算综述 (三):可编程管线 (Programmable Pipeline)

2000年左右&#xff0c;微软在DirectX 8.0中首次提出了Shader Model 1.0和顶点着色器&#xff08;Vertex Shader&#xff09;的概念&#xff0c;标志着可编程管线时代的来临。随后&#xff0c;在DirectX 9.0中推出了Shader Model 2.0和像素着色器&#xff08;Pixel Shader&…

【Go语言基础【3】】变量、常量、值类型与引用类型

文章目录 一、值&#xff08;Value&#xff09;与字面量&#xff08;Literal&#xff09;1. 值2. 字面量 二、变量&#xff08;Variable&#xff09;1. 声明方式2. 赋值方式3. 变量默认值4. 类型与值的匹配 三、常量&#xff08;Constant&#xff09;1. 声明方式2. 常量的特性3…

AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用

自己踩过坑不想别人也踩坑了 亚马逊S3存储桶直传前端demo复制即可使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0…

Python数据可视化科技图表绘制系列教程(四)

目录 带基线的棒棒糖图1 带基线的棒棒糖图2 带标记的棒棒糖图 哑铃图1 哑铃图2 包点图1 包点图2 雷达图1 雷达图2 交互式雷达图 【声明】&#xff1a;未经版权人书面许可&#xff0c;任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博…

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

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

[yolov11改进系列]基于yolov11使用SwinTransformer替换backbone用于提高多尺度特征提取能力的python源码+训练源码

【SwinTransformer介绍】 摘要 ViT的缺点&#xff1a; Transformer在语言处理中的基本元素是word token&#xff0c;其特点是语义信息比较密集。而ViT中token的尺度&#xff08;scale&#xff09;是固定的&#xff0c;且视觉token携带的语义信息比语言文字序列差&#xff0c…

NoSQL 之 Redis 配置与优化

目录 一、Redis 介绍 1、关系型数据库与非关系型数据库 &#xff08;1&#xff09;关系型数据库 &#xff08;2&#xff09;非关系型数据库 &#xff08;3&#xff09;非关系型数据库产生背景 2、Redis 基础 &#xff08;1&#xff09;Redis 简介 &#xff08;2&#x…

算法复杂度,咕咕咕

1.数据结构与算法 数据结构是计算机存储&#xff0c;组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。可以理解为形状不同的容器。 算法是定义好的计算过程&#xff0c;取输入值&#xff0c;经过一系列计算方法变成输出值。 &#xff08;推荐…

【Linux】 Linux 进程控制

参考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/125581083 一、进程创建 1.1 fork()函数 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。进程调用fork&#xff0c;当…

【大模型】MCP是啥?它和点菜、做菜、端菜有啥关系?

什么是 Model Context Protocol (MCP)? Model Context Protocol(模型上下文协议),通俗来说,就是一套用来管理、传递和维护对话或交互中上下文信息的规则和格式标准。 换句话说,MCP定义了模型在处理用户输入和生成回答时,如何理解、保留和传递上下文信息的协议,确保对…