亿级流量下的缓存架构设计: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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…