億級流量下的緩存架構設計:Redis+Caffeine多級緩存實戰

億級流量下的緩存架構設計:Redis+Caffeine多級緩存實戰

一、為什么需要多級緩存?

在億級流量場景下,單純依賴Redis會遇到三大瓶頸:

  • 網絡延遲:Redis遠程訪問通常需要1-5ms,QPS超過10萬時成為瓶頸

  • 資源成本:高頻讀取導致Redis CPU飆升至80%+

  • 可用性風險:Redis集群故障時數據庫直接被擊穿

多級緩存架構正是破局關鍵:

客戶端
瀏覽器本地緩存
CDN緩存
Nginx代理緩存
應用層Caffeine緩存
Redis分布式緩存
MySQL數據庫

二、Caffeine+Redis核心架構設計

2.1 組件定位

組件特性適用場景
Caffeine進程內緩存,訪問速度納秒級高頻熱key(如秒殺商品)
Redis分布式緩存,數據一致性高全量數據緩存層

2.2 數據流轉流程

public Product getProduct(Long id) {// 1. 查詢CaffeineProduct product = caffeineCache.getIfPresent(id);if (product != null) {return product; }// 2. 查詢Redis(加分布式鎖防擊穿)product = redisUtil.getWithLock("product:" + id, lockKey -> loadFromDB(id),  // 緩存未命中時查DB3, TimeUnit.SECONDS);// 3. 回填Caffeine(設置短過期時間)caffeineCache.put(id, product, 30, TimeUnit.SECONDS);return product;
}

三、關鍵技術實現

3.1 Caffeine高效配置

Caffeine<Object, Object> caffeine = Caffeine.newBuilder().maximumSize(10_000)                 // 基于容量淘汰.expireAfterWrite(30, TimeUnit.SECONDS) // 寫后過期.refreshAfterWrite(5, TimeUnit.SECONDS) // 異步刷新.recordStats();                      // 開啟監控統計LoadingCache<Long, Product> cache = caffeine.build(id -> {// 異步加載函數(避免阻塞請求線程)return loadFromRedis(id); 
});

3.2 Redis熱點Key處理

// 使用Redis集群分片+本地緩存分攤壓力
public Product getProduct(Long id) {int slot = id % 100; // 分片邏輯String key = "product:" + slot + ":" + id;// 先讀本地緩存再讀Redis...
}

3.3 緩存一致性保障

雙刪策略+版本號控制:

// 更新數據時
public void updateProduct(Product product) {// 1. 更新數據庫db.update(product);// 2. 刪除Redis(失敗重試3次)redis.deleteWithRetry("product:"+product.getId());// 3. 延遲500ms二次刪除(防舊數據回填)scheduleTask(() -> {redis.delete("product:"+product.getId());caffeine.invalidate(product.getId());}, 500);// 4. 設置版本號(解決并發更新)redis.incr("version:"+product.getId());
}

四、性能壓測對比

使用JMeter模擬100萬QPS:

方案平均響應時間Redis CPU數據庫QPS
純Redis12ms92%1800
多級緩存1.8ms35%<10

性能提升點:

  • 99%的熱點請求被Caffeine攔截

  • Redis負載下降60%

五、避坑指南

緩存污染問題

解決方案:Caffeine配置weakKeys+softValues

.weakKeys().softValues()  // 啟用弱引用+軟引用

冷啟動雪崩

預熱方案:使用Guava的CacheLoader預加載熱數據

CacheLoader.asyncReloading((id) -> loadFromDB(id), executor)

監控告警體系

// 通過Micrometer暴露指標
CaffeineMetrics.monitor(monitorRegistry, cache, "productCache");

監控看板需包含:

Caffeine命中率(Hit Ratio)

Redis連接池等待時間

六、擴展優化方向

熱點探測:基于Redis的hotkeys命令動態識別熱數據

分級存儲:

  • L1:Caffeine(最新數據)

  • L2:Redis(全量數據)

  • L3:磁盤緩存(歷史數據)

流量調度:根據用戶IP路由到就近緩存節點

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90595.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90595.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90595.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI基建還能投多久?高盛:2-3年不是問題,回報窗口才剛開啟

高盛表示&#xff0c;盡管AI商業化變現仍處早期階段&#xff0c;但基于成本削減的第一階段回報已經顯現。預測到2030年AI自動化可為財富500強企業節省約9350億美元成本。分析師認為&#xff0c;這一早期收益足以支撐當前AI基礎設施投資水平&#xff0c;盡管增長率可能放緩。雖然…

【mac】快捷鍵使用指南

在Mac上&#xff0c;根據選擇對象的不同&#xff0c;在選擇時移動的方法也有所不同&#xff0c;以下是具體介紹&#xff1a; 移動文件或文件夾&#xff1a;可通過拖放操作移動。打開“訪達”&#xff08;Finder&#xff09;&#xff0c;找到要移動的文件或文件夾&#xff0c;按…

CS144 lab2 tcp_receiver

1. 實驗目的 lab2 的目的是實現tcp的接收端。 主要包括兩方面 &#xff08;1&#xff09; 從發送端接收消息&#xff0c;使用Reassembler聚合字節流&#xff08;Bytestream&#xff09; &#xff08;2&#xff09;將確認號&#xff08;ackno&#xff09;和window size發回對端 …

【論文筆記】A Deep Reinforcement Learning Based Real-Time Solution Policy for the TSP

《基于 DRL 和 DCNN 的實時 TSP 求解策略》IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS, VOL. 24, NO. 6, JUNE 2023一段話總結本文提出了一種基于深度強化學習&#xff08;DRL&#xff09; 和深度卷積神經網絡&#xff08;DCNN&#xff09; 的實時旅行商問題&am…

MMaDA:多模態大型擴散語言模型

集眾家之所長&#xff0c;成大一統。普林斯頓大學、北京大學、清華大學、字節跳動的研究者將“文本推理、多模態分析、圖像生成”三大方向融合在一個單一擴散模型里&#xff0c;并用恰當的優化策略來提升模型在各個方向的性能。 研究動機 研究人員致力于開發一個能夠處理多種模…

容器技術入門與Docker環境部署

容器技術入門與Docker環境部署Docker概述什么是 DockerDocker 的優勢Docker 的應用場景Docker 核心概念(1)鏡像(2)容器(3)倉庫Docker 安裝1.關閉系統防火墻和內核2.下載Docker的repo文件3.替換倉庫地址4.更新索引文件并安裝Docker5.添加國內鏡像站6.開啟Docker服務7.優化內核參…

【01】MFC入門到精通—— MFC新建基于對話框的項目 介紹(工作界面、資源視圖 、類視圖)

文章目錄1 創建工程2 運行3 工作界面介紹3. 1 類視圖 Class View3.2 如何打開 類視圖3.3 資源視圖1 創建工程 選擇菜單項 文件->新建->項目&#xff0c;彈出 “新項目” 對話框。 選擇 MFC&#xff0c;點擊下一步&#xff0c;然后鍵入工程名稱&#xff0c;本例取名“Add…

2025!在Windows的Python中安裝GDAL包(小白能成!)

最近更新 在2025.06.05日&#xff0c;GDAL發布預告&#xff1a;新版本將適配pipeline和向量讀寫功能。 直到2025.06.25日&#xff0c;最新的版本才算發行出來。 有朋友催我趕緊更新教程&#xff0c;我上次更新是3月份的時候了&#xff0c;恰好是GDAL上一個版本出來的時間。 前…

Python第一次作業

# 1.技術面試題**&#xff08;1&#xff09;TCP與UDP的區別是什么&#xff1f;****答&#xff1a;TCP 是 “可靠但較慢” 的協議&#xff0c;適合對數據完整性要求高的場景&#xff1b;UDP 是 “快速但不可靠” 的協議&#xff0c;適合對實時性要求高的場景。兩者互補&#xff…

Linux【大數據運維】下制作Redis綠色免安裝包(一)

linux下安裝Redis比較繁瑣&#xff0c;遇到內網部署環境更是麻煩。根據經驗將Redis打包一個綠色版進行使用。 大體思路&#xff0c;在一臺正常的機器上面制造好安裝包&#xff0c;然后上傳到內網服務器&#xff0c;解壓使用。 下載&#xff1a; wget https://download.redis…

89104 PCIe Switch芯片國產替代 - PCIE5.0國產AI服務器高性能擴展,支持海光/龍芯/飛騰等

以下是針對89104 PCIe Switch芯片國產替代的高性能PCIe 5.0 AI服務器擴展方案的詳細分析&#xff1a;一、核心國產替代芯片&#xff1a;TL63104控制器?技術規格?支持PCIe 5.0全速率&#xff08;32 GT/s&#xff09;&#xff0c;提供968 Lanes配置&#xff0c;聚合雙向帶寬達1…

Docker跨架構部署實操

需求場景 python項目&#xff0c;開發環境以及可供測試的環境為X86架構下的LINUX服務器&#xff0c;但正式環境需要部署在ARM架構下的麒麟服務器&#xff0c;且正式環境后續可能會長時間處于斷網狀態&#xff0c;需要一份跨架構的部署方案。 解決思路 在 X86 上打包、在 ARM&am…

JavaScript 樹形菜單總結

樹形菜單是前端開發中常見的交互組件,用于展示具有層級關系的數據(如文件目錄、分類列表、組織架構等)。以下從核心概念、實現方式、常見功能及優化方向等方面進行總結。 一、核心概念 層級結構:數據以父子嵌套形式存在,如{ id: 1, children: [{ id: 2 }] }。節點:樹形結…

【python實用小腳本-131】Python 實現 HTML 到 PDF 轉換:解決文檔處理痛點的高效工具

引言 在當今數字化辦公環境中&#xff0c;文檔格式的轉換需求日益頻繁。假設你是一位市場營銷人員&#xff0c;需要將公司網站的產品介紹頁面&#xff08;HTML 格式&#xff09;轉換為 PDF 文檔&#xff0c;以便用于線下宣傳。然而&#xff0c;手動復制粘貼內容并調整格式不僅…

【Linux操作系統】簡學深悟啟示錄:Linux基本指令

文章目錄1.什么是操作系統&#xff1f;2.Xshell的使用3.常用指令3.1 ls指令3.2 pwd指令3.3 cd指令3.4 touch指令3.5 mkdir指令3.6 rmdir指令 && rm指令3.7 man指令3.8 cp指令3.9 mv指令3.10 cat指令3.11 echo指令&#xff08;重定向&#xff09;3.12 more指令3.13 less…

「py數據分析」04如何將 Python 爬取的數據保存為 CSV 文件

如何將 Python 爬取的數據保存為 CSV 文件 從原始網絡數據到純凈 CSV - 搭建通往分析的橋梁 恭喜你&#xff01;經過前面的努力&#xff0c;你的 Python 腳本終于成功地從一個網站上爬取了數據&#xff0c;一個充滿信息的寶庫正靜靜地躺在你的變量中。但接下來呢&#xff1f;…

qemu vcpu的創建過程

在 QEMU 中&#xff0c;vCPU 線程的啟動流程涉及多個階段&#xff0c;包括初始化、線程創建和執行邏輯。以下是基于搜索結果的詳細分析&#xff1a; QEMU vCPU 線程的啟動流程 1. 初始化階段 設備實例化&#xff1a;QEMU 使用 QOM&#xff08;QEMU Object Model&#xff09;系統…

Spring Security架構與實戰全解析

Spring security1.安全架構1. 認證who are you登陸系統&#xff1a;用戶系統2. 授權權限管理&#xff1a;用戶授權3. 攻擊防護xss (cross-site scripting)csrf (cross-site request forgery)cors (cross-origin resource sharing)sql注入4. 擴展&#xff1a;權限管理模型a. RBA…

LeetCode Hot 100 搜索二維矩陣 II

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a;每行的元素從左到右升序排列。每列的元素從上到下升序排列。示例 1&#xff1a;輸入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[…

Windows Edge 播放 H.265 視頻指南

目錄 &#x1f4cc;前言 一 . 什么是 H.265&#xff08;HEVC&#xff09;&#xff1f; 二、為什么 Edge 默認不能播放 H.265&#xff1f; 三、Edge 播放 H.265 解決方案 1 . 查看顯卡是否支持硬解AMD GPU Decoder Device InformationNVIDIA GPU Decoder Device Informat…