缓存穿透、雪崩、击穿深度解析与解决方案
缓存穿透、雪崩、击穿深度解析与解决方案
一、缓存三大核心问题全景解析
1. 问题定位与影响分析
问题类型 | 触发条件 | 典型现象 | 核心风险 |
---|---|---|---|
缓存穿透 | 大量请求访问不存在的键 | Redis 命中率骤降(<10%) | 数据库压力激增,可能宕机 |
缓存雪崩 | 大量缓存键同时过期或 Redis 集群故障 | Redis 内存使用率骤降,数据库 QPS 飙升 | 系统整体响应延迟升高 |
缓存击穿 | 热点键过期瞬间大量请求并发访问 | 单键访问量突增,击穿缓存层 | 数据库单表压力峰值超限 |
二、缓存穿透:原理与根治方案
1. 核心原理剖析
攻击路径
根源分析
- 恶意攻击:利用不存在的键发起海量请求(如爬虫扫描)
- 业务逻辑缺陷:未对非法参数做校验(如订单号为空)
- 数据不一致:数据库删除数据后未及时清理缓存
2. 分级解决方案
方案一:缓存空值(基础防护)
// 空值缓存示例(设置短 TTL,如 5 分钟)
public Object get(String key) {Object value = redis.get(key);if (value == null) {value = db.query(key);redis.set(key, value != null ? value : "null", 300, TimeUnit.SECONDS);}return value == "null" ? null : value;
}
优缺点
- ✅ 简单易实现,无需额外组件
- ❌ 空值占用内存,可能存储过时数据
方案二:布隆过滤器(高级防护)
架构图
实现步骤
-
初始化布隆过滤器(误判率 0.01%,元素数量 1000 万)
BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8), 10_000_000, 0.01 );
-
请求校验
if (!bloomFilter.mightContain(key)) {return null; // 直接拦截无效请求 }
-
数据写入时更新布隆过滤器
if (data != null) {bloomFilter.put(key);redis.set(key, data); }
扩展场景
- 动态布隆过滤器:使用 Redis 存储布隆过滤器数据,支持集群环境
- 定期重建:当元素数量超过阈值时,异步重建布隆过滤器
三、缓存雪崩:全链路防御策略
1. 核心触发场景
- 批量过期:同一批次缓存键设置相同 TTL(如每天凌晨重置)
- 集群故障:主节点宕机且从节点未及时切换(如网络分区导致脑裂)
- 大促流量:突发流量超过缓存层承载能力(如秒杀活动瞬间百万请求)
2. 多层防御体系
第一层:缓存层优化
-
随机化 TTL:
int baseTtl = 3600; // 基础 TTL 1小时 int randomTtl = new Random().nextInt(1800); // 随机波动 0.5小时 redis.set(key, value, baseTtl + randomTtl, TimeUnit.SECONDS);
-
热点数据永不过期:通过异步线程定期刷新数据(如
refreshAfterWrite
)
第二层:流量层削峰
-
令牌桶限流:
RateLimiter limiter = RateLimiter.create(1000); // 限制每秒 1000 请求 if (!limiter.tryAcquire()) {return fallback(); // 拒绝多余请求 }
-
消息队列削峰:将请求存入 Kafka 队列,消费端按数据库承载能力拉取
第三层:服务层降级
-
熔断机制
(Hystrix 示例):
@HystrixCommand(fallbackMethod = "fallback") public Object getWithFallback(String key) {// 正常逻辑 }public Object fallback(String key) {return cache.getBackup(key); // 返回备用数据或默认值 }
四、缓存击穿:热点键守护方案
1. 问题本质分析
时序图
核心矛盾
- 热点键访问量极高(如秒杀活动中的商品库存键)
- 过期瞬间所有请求同时穿透至数据库
2. 解决方案对比与选型
方案一:互斥锁(RedLock)
// 加锁逻辑
String lockKey = "lock:hotKey";
String clientId = UUID.randomUUID().toString();
boolean locked = redis.set(lockKey, clientId, "NX", "PX", 1000);
if (locked) {try {Object value = redis.get(hotKey);if (value == null) {value = db.query(hotKey);redis.set(hotKey, value);}return value;} finally {// 释放锁(需验证客户端 ID 防止误删)String script = "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) else return 0 end";redis.eval(script, 1, lockKey, clientId);}
} else {// 其他线程等待或重试Thread.sleep(100);return get(hotKey);
}
适用场景:写少读多场景,锁竞争不激烈时效果最佳
方案二:逻辑过期(后台刷新)
// 缓存值包含逻辑过期时间
class CachedValue {private Object data;private long expireTime; // 逻辑过期时间(非 Redis TTL)
}// 读取逻辑
CachedValue value = (CachedValue) redis.get(hotKey);
if (value != null && System.currentTimeMillis() < value.getExpireTime()) {return value.getData(); // 未过期直接返回
}// 异步刷新
CompletableFuture.runAsync(() -> {Object newData = db.query(hotKey);CachedValue newCachedValue = new CachedValue(newData, System.currentTimeMillis() + 3600000);redis.set(hotKey, newCachedValue, 7200, TimeUnit.SECONDS); // Redis TTL 设为 2小时
});return value != null ? value.getData() : fallback(); // 返回旧数据或兜底值
优势:无锁竞争,适合高并发读场景
五、生产环境实战案例
案例一:电商缓存穿透治理
背景:某电商平台遭遇恶意爬虫扫描,日均无效请求超 10 亿次
方案:
- 布隆过滤器拦截:使用 Redis 存储布隆过滤器数据(误判率 0.001%)
- 接口签名校验:对请求参数进行 HMAC-SHA256 签名,过滤非法请求
- 限流熔断:对匿名用户接口设置每秒 100 请求上限
效果:数据库无效请求减少 99.9%,Redis 命中率恢复至 85%
案例二:直播平台缓存雪崩应对
背景:明星直播开播瞬间,百万级用户同时请求直播间信息,导致 Redis 集群 50% 节点宕机
方案:
- 多级缓存:本地缓存(Caffeine)+ Redis + 数据库
- 流量分层:
- 热点数据(主播基础信息)存本地缓存,TTL=30 秒
- 动态数据(在线人数)存 Redis,TTL=5 秒
- 集群扩容:临时增加 50% 节点,大促后缩容
效果:数据库 QPS 从 5 万降至 5000,系统可用性保持 99.99%
六、高频面试题深度解析
1. 问题鉴别与方案选型
问题:如何区分缓存穿透与缓存雪崩?
解析:
- 缓存穿透:单个或少量键频繁未命中,数据库负载均匀升高
- 缓存雪崩:大量键同时失效,数据库负载瞬间达到峰值
- 诊断工具:
- 穿透:
redis-cli --hotkeys
查看无效键分布 - 雪崩:监控
redis_cache_entries
指标骤降
- 穿透:
2. 方案优缺点对比
问题:布隆过滤器为什么会有误判?如何降低误判率?
解析:
- 误判原理:哈希冲突导致不存在的键被误判为存在(假阳性)
- 降低误判率方法:
- 增加位数组长度(如从 10MB 扩容至 100MB)
- 增加哈希函数数量(最优值为
(m/n) * ln2
,m 为位数,n 为元素数) - 定期重建布隆过滤器(如每天凌晨业务低峰期)
七、防御体系持续优化
1. 全链路监控指标
指标名称 | 采集方式 | 预警阈值 |
---|---|---|
缓存穿透率 | (总请求数 - 命中数) / 总请求数 | >5% 触发告警 |
雪崩影响时长 | 缓存重建完成时间 | >10 分钟 触发升级 |
击穿峰值 QPS | 单键瞬时请求量 | >10 万次 / 秒 触发防护 |
2. 自动化容灾演练
混沌工程实践
- 模拟 Redis 节点宕机:通过 Chaos Monkey 随机终止节点进程
- 注入缓存穿透攻击:使用 JMeter 发送 10 万级无效键请求
- 验证防御机制:
- 布隆过滤器拦截率是否达标(>99%)
- 熔断机制是否及时触发(延迟 < 500ms)
- 数据库限流是否生效(QPS 控制在阈值内)
总结与展望
本文系统解析了缓存领域的三大核心问题 —— 穿透、雪崩、击穿的原理、影响与解决方案,构建了从预防、拦截到容灾的全链路防御体系。实际应用中,需结合业务特点组合使用多种方案(如布隆过滤器 + 互斥锁 + 熔断降级),并通过持续监控与演练确保防御体系的有效性。
未来发展趋势:
- 智能化防御:引入机器学习预测热点键与攻击模式,动态调整缓存策略
- serverless 化:云厂商提供全托管缓存防护服务(如 AWS WAF 集成 Redis 防护)
- 零信任架构:将缓存防护纳入零信任体系,对所有请求进行身份验证与权限校验
掌握缓存三大问题的本质与解决技巧,是分布式系统开发与架构设计的核心能力,也是应对高并发场景的必备技能。
相关文章:
缓存穿透、雪崩、击穿深度解析与解决方案
缓存穿透、雪崩、击穿深度解析与解决方案 一、缓存三大核心问题全景解析 1. 问题定位与影响分析 问题类型触发条件典型现象核心风险缓存穿透大量请求访问不存在的键Redis 命中率骤降(<10%)数据库压力激增,可能宕机缓存雪崩大量缓存键同…...
【AI】基于OllamaSharp与.NET Core API的高效LLM查询实现
本文旨在演示如何通过OllamaSharp NuGet包在.NET Core API中高效查询Ollama大语言模型,重点展示如何通过JSON配置文件动态设置模型参数和服务器地址,实现灵活维护的AI服务架构。 创建.NET Core API项目dotnet new webapi -n OllamaLLMAPI cd OllamaLLMAPI添加OllamaSharp NuG…...
kotlin和MVVM的结合使用总结(二)
MVVM 架构详解 核心组件:ViewModel 和 LiveData 在 Android 中,MVVM 架构主要借助 ViewModel 和 LiveData 来实现。ViewModel 负责处理业务逻辑,而 LiveData 则用于实现数据的响应式更新。 ViewModel 的源码分析 ViewModel 的核心逻辑在 …...
U盘能识别但无法写入数据的原因
1. U 盘物理损坏 原因:U 盘内部存储芯片、电路板或接口接触不良,可能因摔落、高温、频繁插拔等导致。表现:插入电脑能识别盘符,但读写时提示 “磁盘错误”“无法访问” 或操作无反应。解决方法: 尝试用其他设备&#…...
多模态大模型 Qwen2.5-VL 的学习之旅
Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL 系列模型性能强大,具备多语言对话、多图交错对话等能力ÿ…...
linux sudo 命令介绍
sudo(superuser do)是一个用于 Linux 系统的命令,它允许授权用户以其他用户(通常是 root 超级用户)的安全权限执行命令。 有了 sudo,用户在执行特定的、需要更高权限的操作时,就不需要切换到 r…...
STM32F103系列单片机寄存器操作和标准库操作
关于stm32,标准库很早就学完了,但如果想要更加深入学习计算机硬件,那么学会寄存器操作是非常有必要的。今天从最简单的点灯开始,我们来对比一下二者的不同。 一、寄存器操作和标准库操作中点亮LED的区别 寄存器操作:…...
如何解决PyQt从主窗口打开新窗口时出现闪退的问题
在PyQt5中,当从主窗口打开新窗口时,经常会出现闪退现象,这通常是由于对象生命周期管理不当或事件循环错误等所导致。 1. 确保新窗口实例被正确引用 新窗口的实例若未被主窗口引用,可能会被Python的垃圾回收机制销毁。 错误示例&…...
2025五一杯数学建模竞赛思路助攻预定
2025五一杯数学建模竞赛思路助攻预定(思路内容见文末名片) 一、概况 数学建模竞赛是一项模拟面对实际问题寻求解决方案的活动,是一次近似 于“真刀真枪”的创新探索性实践训练。在丰富并活跃学生课外生活活动的同 时,数学建模竞…...
Java集合框架解析
一、集合框架概述 1. 集合框架体系结构 Java集合框架(Java Collections Framework, JCF)位于java.util包中,包含三大核心接口: Collection:单列数据集合的根接口 List:有序可重复集合Set:无序…...
《100天精通Python——基础篇 2025 第1天:从编程语言到计算机基础,开启你的学习之旅》
目录 一、计算机组成原理之概述篇二、编程语言是什么三、编译型语言和解释型语言的区别3.1 编译型语言3.2 解释型语言 四、Python是什么五、Python有哪些优点和缺点?5.1 Python的优点5.2 Python 的缺点 六、学Python能干什么,Python的应用领域有哪些&…...
JavaFX 第三篇 HostServices和Platform
1、HostServices类 介绍这个类主要是使用里面的一个方法 返回类型方法说明voidshowDocument(java.lang.String uri)使用默认浏览器打开一个url地址 /*** description: 程序打开3秒后,打开百度* author: HK* since: 2025/4/24 16:40*/ public class Demo1 extends…...
【Java 8新特性】Stream API 和 Lambda 表达式
一、前言 Java 8 的 Stream API 和 Lambda 表达式 为集合处理带来了函数式编程风格,显著简化了代码并提高了可读性。 二、Lambda 表达式 1.作用 简化匿名内部类的语法,允许将函数作为参数传递。实现函数式接口(只有一个抽象方法的接口&…...
Vue 3 相比 Vue 2 的优势
1. 性能优化 更快的渲染: 基于 Proxy 的响应式系统,比 Vue 2 的 Object.defineProperty 更高效,初始化速度和内存占用优化显著。编译时优化(如静态树提升、补丁标志等),减少运行时开销。 更小的体积&#…...
深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南
深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南 在现代 Java 应用中,ThreadLocal 被广泛用于线程隔离上下文,比如用户会话、链路追踪等。但随着线程池的普及,ThreadLocal 也暴露出严重局限性,尤其是在异步场景中上下文无法正确传递的问题。 本文从 Thr…...
入门 Go 语言
本专栏的 Go 语言学习参考了B站UP 软件工艺师的视频 本节需要: Go 语言环境VSCode 安装环境 下载 Go 环境,并安装下载 VSCode,安装。在 VSCode 中安装 Go 扩展: 接下来就可以编写 Go 语言了 第一条 Go Go 语言是一种编译型…...
膳食营养诊断活动:科技赋能,共筑全民健康新基石
膳食营养诊断活动:科技赋能,共筑全民健康新基石 一、活动背景:响应营养周号召,开启健康新征程 (一)2025营养周主题解读 2025年全民营养周的核心主题“吃动平衡,健康体重,全民行动…...
考拉悠然:科技与匠心,以烟草虫情AI监测系统共筑品质未来
李工,一位在卷烟厂辛勤耕耘了二十余载的老工艺师,他的青春和汗水,都挥洒在了这片弥漫着烟草香气的土地上。他像一位老农,精心呵护着每一片烟叶,因为他深知,烟草品质的把控,就是守护着卷烟厂的生…...
k8s基于角色的访问控制(RBAC)
Kubernetes(k8s)权限管理主要是基于角色的访问控制(RBAC),以下是其核心内容: 核心概念 Role 和 ClusterRole Role :定义特定命名空间内的权限规则,用于在某个命名空间内设置访问权限…...
拆解华为Pura X新发现:“仿生”散热与钛合金“骨架”
拆解华为Pura X新发现:“仿生”散热与钛合金“骨架” 原创 黑毛警长008 AR圈 2025年04月24日 09:42 广东 01 引言:AI时代带来折叠屏新挑战 随着华为Pura X的发布,市场上已出现多家机构的拆解分析,但大多聚焦于芯片和电子组件层面…...
Typecho 访客统计插件最新版-前后台统计图均可显示
这是一个为 Typecho 博客系统开发的访客统计插件,基于原版的VistorLogger修改版本。该插件提供了详细的访问统计功能,包括访问国家/地区统计、IP分布等信息,并进行了隐私保护处理。 功能特点 独立页面模板显示访问国家/地区统计(…...
与智者同行:京东零售技术人的成长书单
我们正处在一个快速变化的时代,信息洪流奔涌而来,如何穿透纷繁的表象,理解世界的复杂性?又如何在充满不确定性的环境中,找到属于自己的方向? 阅读,是最从容的答案,让我们站在智者的…...
matplotlib1-画成对数据图
画图的类型 成对数据(Pairwise data) 成对形式的数据 (x, y);表格形式的数据 (var_0, var_1, ..., var_n) ;函数形式的数据 f(x) y 1. 绘图-plot(x, y) 以线条或标记的形式将 y 随 x 的变化情况绘制成图表。 2. 散点图-scatt…...
深入理解表单---提交用户与网页交互的重要方式:GET 与 POST 的本质区别与应用实践
在 Web 开发中,表单(<form>)是用户与网页交互的重要方式,而表单的 method 属性则决定了数据是如何发送到服务器的。本文将带你系统理解 GET 和 POST 请求方式的区别、使用场景与注意事项,并结合示例进行实战分析…...
VIVADO中单bit信号的跨时钟域处理(快时钟到慢时钟)
VIVADO中单bit信号的跨时钟域处理 同步触发器的约束,确保软件布局布线时把同步的触发器放到同一个SLICE中 目录 前言 一、快时钟的脉冲到慢时钟的同步方法一 1、正确结果 2、源时钟脉冲展宽组合逻辑输出不加触发器的风险 3、目的时钟采样组合逻辑输出不加触发器…...
解决 Windows10 下 UWP 应用无法使用本地代理
从Micorsoft Store下载的应用默认不允许使用本地代理(或者说就不允许访问localhost) 但是可以借助于系统自带的 CheckNetIsolation 工具来突破该限制 操作 找出要修改的应用 SID 在注册表 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Cur…...
实验三 进程间通信实验
一、实验目的 1、了解什么是信号。 2、熟悉LINUX系统中进程之间软中断通信的基本原理。 3、理解进程的同步关系。 4、掌握用信号实现进程间的同步操作。 5、了解什么是管道。 6、熟悉UNIX/LINUX支持的管道通信方式。 二、实验内容 1、阅读下列程序,执行程序…...
NHANES指标推荐:TyG-WHtR
文章题目:Can cardiovascular health and its modifiable healthy lifestyle offset the increased risk of all-cause and cardiovascular deaths associated with insulin resistance? DOI:10.1186/s12933-025-02674-z 中文标题:心血管健康…...
Winddows11官网下载安装VMware Workstation Pro17(图文详解)
Winddows11安装VMware17 1、官网下载2、安装3、总结 1、官网下载 官网地址 点击Products,滑到最下面,选择SEE DESKTOPP HYPERVISORS 选择 DOWNLOAD FUSION OR WORKSTATION 自动跳转到下面哪个服界面,注册 输入邮箱地址和图片下面的文字…...
YOLO训练时到底需不需要使用权重
1. 预训练权重的作用与本质 预训练权重(Pretrained Weights)是在大规模数据集上训练得到的模型参数。这些权重能够学习通用的特征模式,如边缘、纹理、形状等,从而帮助模型更快收敛并提高泛化能力。YOLO提供的官方预训练权重通常基…...
2025最新软件测试面试八股文(答案+文档+视频讲解)
1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己&…...
SpringBoot整合AOP
没事做个Demo案例,首先看下项目结构: 第1步,导入依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 第2步…...
第16章:MCP服务端项目开发实战:对话系统
第16章:MCP服务端项目开发实战:对话系统 对话系统,尤其是聊天机器人和虚拟助手,是 AI Agent 最广泛的应用领域之一。然而,传统的对话系统常常面临挑战,如难以维持长对话连贯性、缺乏个性化交互、无法有效利用对话中积累的知识等。MCP(Memory, Context, Planning)框架为…...
JavaScript 页面刷新:从传统到现代的全面解析
在 Web 开发中,"刷新"是一个基础但极其重要的功能。本文将全面探讨页面刷新的实现方式,从传统方法到现代最佳实践,深入解析每一种方案的原理和适用场景,并给出实用代码示例。 一、理解页面刷新的本质 在 Web 开发中&am…...
2025年Google Play审核策略全面解析
大家好,我是老妙,出海十余年的老司机,目前在死磕google play上架这一块。 目前来说,上架这一块不管是合规产品还是不合规产品,都建议使用有在架包的老号,更稳定,上架的审核时间更短,…...
使用PHP对接印度尼西亚股票市场
在本篇文章中,我们将介绍如何使用PHP语言与StockTV API接口对接,获取并处理印度尼西亚(Indonesia)的股票市场数据。我们将以查询IPO信息和查看涨跌排行榜为例,展示具体的操作流程。 准备工作 首先,确保您…...
第54讲:总结与前沿展望——农业智能化的未来趋势与研究方向
目录 一、本板块内容回顾:人工智能助力农业的多元化应用 ✅ 精准农业与AI ✅ 农业金融与AI ✅ AI与农业政策 ✅ 农业物联网与AI 二、前沿趋势与研究方向:迈向智能、可持续农业的未来 1. AIGC(生成式AI)在农业中的应用 2. 数字孪生农业:虚拟与现实的无缝对接 3. A…...
Go语言中包导入下划线的作用解析
在Go语言的代码中,有时会看到类似以下的导入语句: import _ "github.com/mattn/go-sqlite3"这种以下划线_开头的导入方式,显得有些特别,尤其是对于新手来说,可能会感到困惑,为什么要这样写&…...
Linux学习笔记之动静态库
相信点进这篇帖子的你一定在动静态库的学习中遇到了很多问题。笔者由于曾经囫囵吞枣地学习库的相关知识,导致在实际应用中漏洞百出。所以写下这篇帖子,为大家解答一些疑惑,同时也加强自己的学习印象。 一、库的理解 什么是库?我…...
生成运算树
目录 题目题目描述示例输入输出算法标签: 二叉树, d f s dfs dfs, 模拟, *递归下降算法思路代码*后续 A C AC AC代码 题目 题目描述 在某种脚本语言里,有一个形如 x(api-xn)eps 的运算表达式,该表达式由以下元素构成: 操作数:…...
为什么要提出Null-text Inversion
在传统扩散模型的反转过程中(如DDIM Inversion),文本提示(Prompt)确实不直接影响反转过程,但Null-text Inversion的优化动机源于反转-重建后的图像在后续编辑时对文本的依赖性。以下分步骤详细解释…...
centos离线安装ssh
一、在有网络的环境中准备RPM包 1.在一台与离线机器相同版本和架构的CentOS系统上,安装必要工具: sudo yum install -y yum-utils 2.创建目录存放RPM包: mkdir /tmp/ssh_rpms 3.下载SSH相关包及其依赖 yumdownloader --resolve --destd…...
数据库安装和升级和双主配置
备份和导入数据 ./mysqldump -u root -p123321 test > test.sql rsync -av test.sql root192.168.0.212:/usr/local/mysql/ ./mysql -uroot -p test < …/test.sql sudo tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ sudo ln -sfn /usr/loca…...
React 的 useEffect 清理函数详解
React 的 useEffect 清理函数详解 useEffect 是 React 中用于处理副作用(side effects)的 Hook,清理函数(Cleanup Function)是 useEffect 中返回的一个函数,用于清理或撤销副作用。清理函数的主要目的是确…...
C++ Lambda 表达式
Lambda 表达式的完整语法如下: [capture](parameters) mutable -> return_type { body }[capture](捕获列表):指定外部变量如何被 Lambda 表达式捕获(按值或按引用)。 (parameters)(参数列…...
MATLAB 中的图形绘制
一、线图 plot 函数用来创建x和y值的简单线图。 x 0 : 0.05 : 30; %从0到30,每隔0.05取一次值 y sin(x); plot(x,y,LineWidth,2) %若(x,y,LineWidth,2)可变粗 xlabel("横轴标题") ylab…...
深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
目录 深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret一、目录结构二、ConfigMap 和 Secret 的创建1. 创建 ConfigMapconfig/app-config.yaml:config/db-config.yaml: 2. 创建 Secretsecrets/db-credentials.yaml:…...
【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建
本文章同步到我的个人博客网站:ElemenX-King:【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建 希望大家能使用此网站来进行浏览效果更佳!!! 目录 一、异步FIFO1.1 异步FIFO的定义1.2 亚稳态1.3 异步FIFO关键技术…...
【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统
项目介绍 本课程演示的是一款 基于SpringBootVue的移动台账管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…...
C语言——函数
C语言——函数 函数的概念 函数:也叫子程序。C语言中的函数就是一个完成某项特定任务的一小段代码。C语言函数分类: 按照用户使用:库函数,自定义函数 按照参数的形式:无参函数,有参函数 按照是否有返回值…...