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
繁體地址,請注明出處:http://hk.pswp.cn/web/82627.shtml
英文地址,請注明出處:http://en.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定義了模型在處理用戶輸入和生成回答時,如何理解、保留和傳遞上下文信息的協議,確保對…