Redis缓存穿透、雪崩、击穿的解决方案?
Redis 缓存问题解决方案及Java实现
一、缓存穿透解决方案
(缓存穿透指查询不存在数据,绕过缓存直接访问数据库)
1. 布隆过滤器 + 空值缓存
注意点:
1.布隆过滤器是需要预热数据的,就是需要输入当前数据库已经存在的缓存,这里会有不少的内存消耗。
2.布隆过滤器会出现漏掉的情况,只是通过算法做一个筛选兜底,避免大量数据访问。
3.对于业务方来说,不是所有的缓存都需要添加进入布隆过滤器的,博主认为只有该数据访问有被外攻击的风险,才需要,如果没有的情况下,业务方需要自己兜底防止缓存穿透。
// 使用Guava布隆过滤器(需引入Guava依赖)
// 初始化布隆过滤器(需预热数据)
BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8),1000000, // 预期数据量:根据业务历史数据量估算0.001 // 误判率:每1000次查询允许1次误判
);// 预热数据(系统启动时加载)
database.getAllKeys().forEach(key -> {bloomFilter.put(key); // 将数据库已有key存入过滤器redisTemplate.opsForValue().set(key, database.get(key)); // 初始化缓存
});public Object getData(String key) {// 1. 布隆过滤器校验(存在性预判)if (!bloomFilter.mightContain(key)) {// 确定不存在时直接返回(拦截非法请求)return null; }// 2. 查询Redis缓存Object value = redisTemplate.opsForValue().get(key);if (value != null) {return "NULL".equals(value) ? null : value; // 空值处理逻辑}// 3. 查询数据库(通过过滤器的请求才放行)Object dbValue = database.get(key);// 4. 双写机制更新if (dbValue == null) {redisTemplate.opsForValue().set(key, "NULL", 5, TimeUnit.MINUTES);} else {redisTemplate.opsForValue().set(key, dbValue, 30, TimeUnit.MINUTES);bloomFilter.put(key); // 动态维护布隆过滤器}return dbValue;
}
二、缓存雪崩解决方案
(大量缓存同时过期导致数据库压力激增)
1. 随机过期时间方案
public Object getDataWithRandomExpire(String key) {// 基础过期时间 + 随机偏移量(防止集体失效)int baseExpire = 30; // 基础30分钟int randomOffset = new Random().nextInt(10); // 0-9分钟随机偏移int totalExpire = baseExpire + randomOffset;Object value = redisTemplate.opsForValue().get(key);if (value != null) {return value;}// 查询数据库...Object dbValue = database.get(key);// 设置随机过期时间redisTemplate.opsForValue().set(key, dbValue, totalExpire, TimeUnit.MINUTES);return dbValue;
}
特点:随机会有概率导致时间过期重合(再小概率的事件只要有概率,生产都有可能发生)
2. 永不过期+后台更新方案
// 后台定时更新线程
@Scheduled(fixedDelay = 30 * 60 * 1000) // 每30分钟执行
public void refreshCache() {List<String> hotKeys = getHotKeysFromMonitor(); // 从监控系统获取热点keyhotKeys.parallelStream().forEach(key -> {Object dbValue = database.get(key);redisTemplate.opsForValue().set(key, dbValue); // 不设置过期时间});
}// 数据访问逻辑
public Object getDataWithPersist(String key) {Object value = redisTemplate.opsForValue().get(key);if (value == null) {value = database.get(key);redisTemplate.opsForValue().set(key, value); // 永不过期写入}return value;
}
特点:使用场景必须是很少更新的数据,如果数据库频繁变更,该数据不过期没有特别大的意义。
3. 多级缓存方案
// 本地缓存(使用Caffeine)
Cache<String, Object> localCache = Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).maximumSize(10000).build();public Object getDataWithMultiCache(String key) {// 1. 检查本地缓存Object value = localCache.getIfPresent(key);if (value != null) return value;// 2. 检查Redis缓存value = redisTemplate.opsForValue().get(key);if (value != null) {localCache.put(key, value); // 回填本地缓存return value;}// 3. 数据库查询value = database.get(key);// 4. 双写缓存(设置不同过期时间)redisTemplate.opsForValue().set(key, value, 30 + new Random().nextInt(10), TimeUnit.MINUTES);localCache.put(key, value);return value;
}
特点:实现复杂,维护缓存困难。
4. 熔断降级方案
// 使用Resilience4j熔断器
CircuitBreaker circuitBreaker = CircuitBreaker.ofDefaults("cacheCB");public Object getDataWithCircuitBreaker(String key) {return CircuitBreaker.decorateSupplier(circuitBreaker, () -> {Object value = redisTemplate.opsForValue().get(key);if (value != null) return value;// 超过阈值时触发熔断,返回兜底数据if (circuitBreaker.tryAcquirePermission()) {Object dbValue = database.get(key);redisTemplate.opsForValue().set(key, dbValue, 30, TimeUnit.MINUTES);return dbValue;} else {return getFallbackData(); // 返回预设默认值}}).get();
}
特点:会导致业务有段时间不可用,兜底数据返回,用户体验差
5. 热点数据预加载方案
// 监控系统集成
public void monitorAndPreload() {// 实时统计热点key(示例使用滑动窗口)ConcurrentHashMap<String, AtomicInteger> counter = new ConcurrentHashMap<>();// 数据访问埋点AspectJ.around("execution(* getData(..))", (joinPoint, result) -> {String key = (String) joinPoint.getArgs()[0];counter.computeIfAbsent(key, k -> new AtomicInteger(0)).incrementAndGet();});// 定时分析热点数据ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);scheduler.scheduleAtFixedRate(() -> {counter.entrySet().stream().filter(entry -> entry.getValue().get() > 1000) // 阈值判断.forEach(entry -> {String hotKey = entry.getKey();Object value = database.get(hotKey);redisTemplate.opsForValue().set(hotKey, value, 60, TimeUnit.MINUTES);});counter.clear();}, 5, 5, TimeUnit.MINUTES); // 每5分钟执行
}
特点:需要时间缓存热点数据。
所有方案均可组合使用,建议通过监控以下指标进行方案调优:
- 缓存命中率(Redis/Memcached)
- 数据库QPS(Queries Per Second)
- 系统吞吐量(TPS)
- 熔断器状态(Open/Half-Open/Closed)
总结
解决缓存雪崩就是设计缓存的时候,让缓存不要在同一时间大批量过期,部分很少变化的数据进行预热加载。
三、缓存击穿解决方案
(热点key过期后大量并发请求直达数据库)
1. 互斥锁方案
public Object getDataWithLock(String key) {// 1. 缓存存在时直接返回(无锁)Object value = redisTemplate.opsForValue().get(key);if (value != null) return value;// 2. 尝试获取分布式锁(关键控制点)String lockKey = "LOCK:" + key;try {// 原子性操作:setIfAbsent + expireBoolean isLock = redisTemplate.opsForValue().setIfAbsent(lockKey, "LOCKED",10, // 锁持有时间(秒)TimeUnit.SECONDS);if (Boolean.TRUE.equals(isLock)) {// 3. 仅一个线程执行数据库查询(关键保护)Object dbValue = database.get(key);// 4. 双写缓存(重建热点数据)redisTemplate.opsForValue().set(key, dbValue, 30 + new Random().nextInt(10), // 随机过期时间TimeUnit.MINUTES);return dbValue;} else {// 5. 其他线程等待后重试(避免堆积)Thread.sleep(50);return getDataWithLock(key); }} finally {// 6. 释放锁(必须保证)redisTemplate.delete(lockKey); }
}
总结:缓存击穿的方案就是在重建缓存之前,防止接口并发行为,或者让缓存永不过期
四、组合方案建议
- 分级缓存架构:本地缓存(Caffeine)+ Redis集群
- 热点发现:实时监控Key访问频率,自动续期热点数据
- 熔断降级:Hystrix或Sentinel实现数据库保护
- 异步更新:使用消息队列异步更新缓存
实际生产环境中建议根据业务场景组合使用多种方案,并配合监控系统实时观察缓存命中率、数据库QPS等关键指标。
相关文章:
Redis缓存穿透、雪崩、击穿的解决方案?
Redis 缓存问题解决方案及Java实现 一、缓存穿透解决方案 (缓存穿透指查询不存在数据,绕过缓存直接访问数据库) 1. 布隆过滤器 空值缓存 注意点: 1.布隆过滤器是需要预热数据的,就是需要输入当前数据库已经存在的…...
第29节:现代CNN架构-Inception系列模型
引言 Inception系列模型是卷积神经网络(CNN)发展历程中的重要里程碑,由Google研究人员提出并不断演进。这一系列模型通过创新的架构设计,在保持计算效率的同时显著提升了图像识别任务的性能。从最初的Inception v1到最新的Inception-ResNet,每一代Inception模型都引入了突破…...
初识C++:类和对象(上)
概述:本篇博客主要讲解类和对象的学习。 目录 1. 类的定义 1.1 类定义格式 1.2 访问限定符 1.3 类域 2.实例化 2.1 实例化概念 2.2 this指针 3. 小结 1. 类的定义 1.1 类定义格式 class为定义类的关键字,Stack为类的名字,{} 中为类的…...
腾讯 IMA 工作台升级:新增知识库广场与 @提问功能
目录 一、引言 二、知识库广场功能 2.1 功能架构解析 2.2 技术实现突破 三、知识库提问功能 3.1 交互模式革新 3.2 技术底层逻辑 四、实战价值 4.1 知识管理方面 4.2 工作效率提升方面 4.3 团队协作方面 4.4 知识变现方面 五、未来展望 5.1 技术演进方向 5.2 商业…...
[目标检测] YOLO系列算法讲解
前言 目标检测就是做到给模型输入一张图片或者视频,模型可以迅速判断出视频和图片里面感兴趣的目标所有的位置和它 的类别,而当前最热门的目标检测的模型也就是YOLO系列了。 YOLO系列的模型的提出,是为了解决当时目标检测的模型帧率太低而提…...
Python 之 selenium 打开浏览器指定端口进行接续操作
一般使用 selenium 进行数据爬取时,常用处理流程是让 selenium 从打开浏览器开始,完成全流程的所有操作。但是有时候,我们希望用户先自己打开浏览器进入指定网页,完成登录认证等一系列操作之后(比如用户、密码、短信验…...
GPUGeek携手ComfyUI :低成本文生图的高效解决方案
一、文生图领域的困境与ComfyUI的优势 在当今数字化创意表达的时代,文生图技术日益受到关注。像豆包这类以语言交互为主的大模型,虽然在文本处理上表现出色,但在文生图方面,其生成效果难以达到专业图像创作的要求。而Midjourney&…...
OpenCV CUDA 模块中用于在 GPU 上计算两个数组对应元素差值的绝对值函数absdiff(
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 void cv::cuda::absdiff 是 OpenCV CUDA 模块中的一个函数,用于在 GPU 上计算两个数组对应元素差值的绝对值。 该函数会逐元素计算两…...
互联网大厂Java面试题:深入解析SpringCloud微服务架构中的服务注册与发现机制
互联网大厂Java面试题:深入解析SpringCloud微服务架构中的服务注册与发现机制 面试题 问题: 在SpringCloud微服务架构中,服务注册与发现是核心功能之一。请详细说明Nacos作为服务注册中心的实现原理,并对比其与Eureka的异同点。…...
东芝新四款产品“TB67Z830SFTG、TB67Z830HFTG、TB67Z850SFTG、TB67Z850HFTG系列三相栅极驱动器ic三相栅极驱动器IC
支持用于电动工具、吸尘器、工业机器人等的三相无刷DC电机 东芝电子设备与存储公司(简称“东芝”)推出了TB67Z83xxFTG系列三相栅极驱动器ic的四个产品和TB67Z85xxFTG系列三相栅极驱动器IC的四个产品,用于消费和工业设备的三相无刷DC电机。通过将新产品与作为电机控制…...
react+html-docx-js将页面导出为docx
1.主要使用:html-docx-js进行前端导出 2.只兼容到word,wps兼容不太好 3.处理分页换行 4.处理页眉 index.tsx import { saveAs } from file-saver; import htmlToDocxGenerate from ./HtmlToDocx;const handleExportByHtml async () > {const expor…...
Linux基础 -- SSH 流式烧录与压缩传输笔记
Linux SSH 流式烧录与压缩传输指南 一、背景介绍 在嵌入式开发和维护中,常常需要通过 SSH 从 PC 向设备端传输大文件(如系统镜像、固件)并将其直接烧录到指定磁盘(如 /dev/mmcblk2)。然而,设备端存储空间…...
<论文>(微软)避免推荐域外物品:基于LLM的受限生成式推荐
一、摘要 本文介绍微软和深圳大学合作发表于2025年5月的论文《Avoid Recommending Out-of-Domain Items: Constrained Generative Recommendation with LLMs》。论文主要研究如何解决大语言模型(LLMs)在推荐系统中推荐域外物品的问题,提出了 …...
2025年渗透测试面试题总结-360[实习]安全工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 1. 自我介绍 2. WAF及其绕过方式 3. IPS/IDS/HIDS 4. 云安全 5. 绕过安骑士/安全狗 6. Gopher扩展…...
【机器学习】支持向量回归(SVR)从入门到实战:原理、实现与优化指南
前言 在机器学习的广阔领域中,回归分析作为预测连续型变量的重要手段,被广泛应用于金融预测、工业生产、科学研究等诸多场景。支持向量回归(SVR)作为回归算法家族中的佼佼者,凭借独特的理论优势与强大的实践能力脱颖而…...
右值引用的学习
传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。 左值引用和右值引用 在讲之前,我们先来看一下什么是左值和右值…...
碎片笔记|AI生成图像溯源方法源码复现经验(持续更新中……)
前言:本篇博客分享一些溯源方法的复现经验,希望能帮助到大家🎉。 目录 1. Close-set AttributionRepmixDe-FakeDNA-Net 2. Open-set AttributionPOSE 3. Single-Model AttributionOCC-CLIPLatentTracer 1. Close-set Attribution Repmix 论…...
elementplus el-tree 二次封装支持配置删除后展示展开或折叠编辑复选框懒加载功能
本文介绍了基于 ElementPlus 的 el-tree 组件进行二次封装的 TreeView 组件,使用 Vue3 和 JavaScript 实现。TreeView 组件通过 props 接收树形数据、配置项等,支持懒加载、节点展开/收起、节点点击、删除、编辑等操作。组件内部通过 ref 管理树实例&…...
【C/C++】深度探索c++对象模型_笔记
1. 对象内存布局 (1) 普通类(无虚函数) 成员变量排列:按声明顺序存储,但编译器会根据内存对齐规则插入填充字节(padding)。class Simple {char a; // 1字节(偏移0)int b; …...
Spring MVC数据绑定和响应 你了解多少?
数据绑定的概念 在程序运行时,Spring MVC接收到客户端的请求后,会根据客户端请求的参数和请求头等数据信息,将参数以特定的方式转换并绑定到处理器的形参中。Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑…...
外贸礼品禁忌
一、亚洲 1.印度 牛是神圣动物,别送牛皮制品。另外,左手不洁,送礼得用右手或双手。 2.日本 “梳” 和 “苦” 谐音,不送梳子。日本男性不咋佩戴首饰,除结婚戒指。礼物得装盒、纸包、绳饰,白色包装得有…...
【MySQL 基础篇】深入解析MySQL逻辑架构与查询执行流程
1 MySQL逻辑架构概述 MySQL 的逻辑架构主要分为 Server 层和存储引擎层两部分。 Server 层:包含连接器、查询缓存、分析器、优化器、执行器等组件。同时,所有的内置函数(如日期、时间、数学和加密函数等)也在这一层实现。此外&a…...
基于C#实现中央定位服务器的 P2P 网络聊天系统
基于中央定位服务器的 P2P 网络聊天系统 1 需求分析与实现功能 本次作业旨在实现一个基于中央定位服务器的 P2P 网络聊天系统,也即通过中央定位服务器实现登入,登出与好友的 IP 查询等操作,在好友间的通信使用 P2P 来完成,具体见…...
【C++】map和set的模拟实现
1.底层红黑树节点的定义 enum Colur {RED,BLACK }; template<class T> struct RBTreeNode {RBTreeNode<T>* _left;RBTreeNode<T>* _right;RBTreeNode<T>* _parent;T _data;Colur _col;RBTreeNode(const T& data):_left(nullptr), _right(nullptr…...
数据结构·字典树
字典树trie 顾名思义,在一个字符串的集合里查询某个字符串是否存在树形结构。 树存储方式上用的是结构体数组,类似满二叉树的形式。 模板 定义结构体和trie 结构体必须的内容:当前结点的字符,孩子数组可选:end用于查…...
centos服务器,疑似感染phishing家族钓鱼软件的检查
如果怀疑 CentOS 服务器感染了 Phishing 家族钓鱼软件,需要立即进行全面检查并采取相应措施。以下是详细的检查和处理步骤: 1. 立即隔离服务器 如果可能,将服务器从网络中隔离,以防止进一步传播或数据泄露。如果无法完全隔离&…...
(C语言)超市管理系统(测试2版)(指针)(数据结构)(清屏操作)
目录 前言: 源代码: product.h product.c fileio.h fileio.c main.c 代码解析: 一、程序结构概述 二、product.c 函数详解 1. 初始化商品列表 Init_products 2. 添加商品 add_product 3. 显示商品 display_products 4. 修改商品 mo…...
可变形卷积简介(Deformable Convolution)
1. 核心原理 可变形卷积通过动态调整卷积核的采样位置,增强模型对几何形变(如旋转、缩放)的适应能力。其核心改进包括: 偏移量(Offset):为卷积核的每个采样点学习 x / y x/y x/y方向的偏移量 …...
02_Servlet
目录 一、简介二、Servlet入门案例2.1、编写Servlet2.2、配置Servlet2.3、访问Servlet2.4、常见错误 三、Servlet详解3.1、实现Servlet的三种方式3.1.1、实现Servlet接口3.1.2、继承GenericServlet类3.1.3、继承HttpServlet类 3.2、配置Servlet的两种方式3.2.1、web.xml方式3.2…...
stm32之FLASH
目录 1.简介2.闪存模块组织3.基本结构3.1 FPEC3.2 程序存储器3.2.1 标准编程3.2.2 页擦除3.2.3 全擦除 3.3 选项字节3.3.1 编程3.3.2 擦除 4.器件电子签名5.实验-读取内部FLASH 1.简介 STM32F1系列的FLASH内存是一个非常重要的存储区域,它主要由三个部分组成&#…...
第3.4节 调用链路分析服务开发
3.4.1 什么是Code Call Graph(CCG) Code Call Graph(CCG)即业务代码中的调用关系图,是通过静态分析手段分析并构建出的一种描述代码间关系的图。根据精度不同,一般分为类级别、方法级别、控制流级别&#x…...
超详细Docker教程
前言:大家在在Linux上部署mysql及其他软件时,大家想一想自己最大的感受是什么? 我相信,除了个别天赋异禀的人以外,大多数人都会有相同的感受,那就是麻烦。核心体现在三点: 命令太多了ÿ…...
探索AI新领域:生成式人工智能认证(GAI认证)助力职场发展
在数字化时代的大潮中,人工智能(AI)技术以其强大的影响力和广泛的应用前景,正逐步重塑我们的生活与工作方式。随着生成式AI技术的崛起,掌握这一前沿技能已成为职场竞争中的关键优势。那么,如何通过系统的学…...
sql sql复习
虽然之前学习过sql,但由于重在赶学习进度,没有学扎实,导致自己刷题的时候有的地方还是模模糊糊,现在主要是复习,补一补知识点。 今日靶场: NSSCTF 云曦历年考核题 在做题之前先回顾一下sql注入的原理&…...
初探 Skynet:轻量级分布式游戏服务器框架实战
在游戏服务器开发领域,高效、稳定且易于扩展的框架一直是开发者追求的目标。Skynet 作为一款轻量级、高性能的分布式游戏服务器框架,凭借其独特的设计理念和强大的功能,赢得了众多开发者的青睐 一.Skynet底层架构支持 1.Actor erlang 从语言…...
libarchive.so.19丢失
文章目录 绝对路径可以启动,相对路径不可以以绝对路径启动conda环境,运行python3.8(成功) 报错 Error while loading conda entry point: conda-libmamba-solver (libarchive.so.19: cannot open shared object file: No such file or directory) sudo a…...
vue-ganttastic甘特图label标签横向滚动固定方法
这个甘特图之前插件里,没有找到能固定label标签在屏幕上的办法,用css各种办法都没有实现,所以我我直接手写定位,用js监听滚动条滚动的距离,然后同步移动甘特图label标签,造成一种定位的错觉,以下…...
自动化 NuGet 包打包与上传:完整批处理脚本详解(含 SVN 支持)
在大型项目中,我们常常需要定期打包多个 .csproj 项目为 NuGet 包,并上传到私有 NuGet 服务。这篇文章分享一份实战脚本,支持以下自动化流程: 自动读取、更新 .csproj 文件中的 Version、PackageOutputPath 等节点; 自…...
Go语言空白导入的作用与用途
在 Go 语言中,导入包时前面加下划线 _ 是一种特殊的导入方式,称为 “空白导入” 或 “匿名导入”。 作用: 执行包的初始化(init 函数)但不直接使用包中的标识符 import _ "go.uber.org/automaxprocs" 表示你…...
实验六:按键模拟控制实现
FPGA序列检测器实验(远程实验系统) 文章目录 FPGA序列检测器实验(远程实验系统)一、数字电路基础知识1. 时钟与同步2. 按键消抖原理代码讲解:分频与消抖3. 有限状态机(FSM)设计代码讲解:状态机编码与转移4. 边沿检测与信号同步5. 模块化设计二、实验数字电路整体思想三…...
【愚公系列】《Manus极简入门》038-数字孪生设计师:“虚实映射师”
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
Linux重定向与缓冲区
目录 文件描述符的分配规则 重定向 使用 dup2 系统调用 FILE 文件描述符的分配规则 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main() {int fd open("myfile", O_RDONLY);if(fd < 0){per…...
经典还原反应解析:Wolff-Kishner机制与黄鸣龙改进法
在有机化学发展史上记载的万余种经典反应中,当论及以科学家命名的标志性转化反应时,Wolff-Kishner-黄鸣龙还原反应必然占据重要地位。在大学《有机化学》课程中,学习还原反应时肯定会提到Wolff-Kishner-黄鸣龙还原反应,这是第一个…...
DataX从Mysql导数据到Hive分区表案例
0、下载DataX并解压到对应目录 DataX安装包,开箱即用,无需配置。 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 相关参考文档 https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md 1、Hive分区…...
npm 报错 gyp verb `which` failed Error: not found: python2 解决方案
一、背景 npm 安装依赖报如下错: gyp verb check python checking for Python executable "python2" in the PATH gyp verb which failed Error: not found: python2 一眼看过去都觉得是Python环境问题,其实并不是你python环境问题…...
安装npm:npm未随Node.js一起安装
文章目录 上传至linux服务器/usr/local/目录下 如果npm没有随Node.js一起安装,你可以尝试单独下载并安装npm。但通常情况下,这是不必要的,因为npm是Node.js的一部分。如果确实需要单独安装npm,你可以参考npm的官方安装指南。 npm…...
C++23 ranges::to:范围转换函数 (P1206R7)
文章目录 引言C23 Ranges 概述ranges::to 的定义与功能定义功能 使用场景范围转换为容器简化字符串解析映射转换为向量 ranges::to 的优势代码简洁性提高开发效率与C23的stl容器的范围版本构造函数配合良好 模板参数约束的思考总结 引言 在C的发展历程中,每一个新版…...
openfeign 拦截器实现微服务上下文打通
目录 openfeign 拦截器实现微服务上下文打通需求分析:代码实现:subject 服务:controllerFeign 拦截器:将 Feign 拦截器注册为一个Bean: auth 鉴权服务:全局配置类:登录拦截器:上下文…...
【MySQL】变更缓冲区:作用、主要配置以及如何查看
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
TCP/IP-——C++编程详解
1. TCP/IP 编程基本概念 TCP(传输控制协议):面向连接、可靠的传输层协议,保证数据顺序和完整性。IP(网际协议):负责将数据包路由到目标地址。Socket(套接字):…...