当前位置: 首页 > news >正文

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!

    • 缓存穿透
      • 发生场景
      • 解决方案
    • 缓存击穿
      • 解决方案
    • 缓存雪崩
      • 发生场景
      • 解决方案
    • 总结
      • 三者区分
      • 三者原因
      • 三者解决方案

想象一下,你开了一家便利店,店里有各种各样的零食。

这些零食在货架上,而他们就是你店铺的“缓存”,你的仓库则相当于“数据库”。平时,当顾客来买零食时,你都会从店里的货架(缓存)拿给他,这样既快又方便。

首先,让我们来看一下最常见的缓存模式

在这里插入图片描述

有一天,你的店遇到了三种麻烦。

缓存穿透

有个顾客跑来问你:“请问你们有卖最近 香香甜甜脆脆糕 吗?”
你一下子懵了,因为你知道货架(缓存)上根本没有这种东西(数据不存在)
但顾客不死心,一直缠着你要。于是只好跑到仓库(数据库)去查一下,结果当然是没有。

这种情况就相当于“缓存穿透”,顾客的请求没有在缓存中找到,只好直接访问数据库,而数据库又没有这个数据。

如果此时有大量的顾客都冲进你小小的便利店,向你要 香香甜甜脆脆糕 ,大量的请求挤进了仓库(数据库),那你的仓库就被挤爆了!
在这里插入图片描述

发生场景

缓存穿透发生一般有两种情况

  • 业务误操作,缓存中的数据和数据库中的数据被误删了,导致数据和数据库中都没有这项数据

比如你家小朋友备着偷偷吃掉了所有的香香甜甜脆脆糕

  • 黑客恶意攻击,故意大量访问某些读取不存在的业务

比如有个老黑粗问你这里有没有 AK47自动步枪? (os:??? )

解决方案

应对缓存穿透,常见有如下四种解决方案:

  1. 非法请求限制
  2. 缓存默认值或空值
  3. 使用布隆过滤器来快速判断数据是否存在,避免通过查询数据库来判断数据是否存在
  4. 限流策略

第一种方案,非法请求限制

在便利店入口处就设置一个身份系统检测,你起码得有个合法身份!

当有大量的恶意请求访问不存在的数据的时候,也会发生缓存穿透
因此我们最好在 API 入口处就判断请求参数是否合理,比如说 请求参数是否含有非法值,请求字段是否存在,如果判断出是恶意请求就直接返回错误,避免进一步访问缓存和数据库

第二种方案,缓存默认值或空值

没有 香香甜甜脆脆糕 ,那就拿个绿豆糕给你!

针对查询的数据,在缓存中设置一个设置一个空值或者默认值,这样后续请求就可以从缓存中读取到空值或者默认值,返回给应用,而不会继续查询数据库

但是这里存在一个问题,如果攻击者每次都用不同的且不存在的 key 来请求数据,那么这个方案就会丧失它的效果,而且要回写特殊值,会浪费不少 Redis 内存,这可能会导致 Redis 内存不足,执行淘汰策略的时候,把其他有用的数据淘汰掉。

第三种方案,使用布隆过滤器

在货架(缓存)和仓库(数据库)之间放置一个智能查询机(布隆过滤器),他能快速判断数据是否存在

我们在写入数据库数据时,使用布隆过滤器做个标记,然后在用户请求到来时,业务线程确认缓存失效后,通过查询布隆过滤器快速判断数据是否存在,如果不存在,就不用通过查询数据库来判断数据是否存在了

但是,值得注意的是,布隆过滤器说数据存在,并不一定证明数据库中存在这个数据,但是查询到数据不存在,数据库中一定就不存在这个数据。这涉及到布隆过滤器的工作原理,放在以后的文章中进行讲述

第四种方案,限流策略

门口设置保安,你们这些要 香香甜甜脆脆糕 的得排队!

针对频繁请求的特定数据,可以设置限流策略, 例如使用令牌桶算法或漏桶算法,限制对这些数据的请求频率,减轻数据库的压力

缓存击穿

有一天,店里的一包薯片突然成了热门商品(热点数据),大家都想要买。但这包薯片刚好快过期了,于是你把它的货架撤下来(热点数据过期)。可是就在这时,一大群顾客蜂拥而至,每个人都想要这包薯片(大量请求访问热点数据)。你只好一个个去告诉他们:“薯片没有了,换新的了。”结果这些顾客都不信,非得一个个去仓库看有没有。这样一来,你的仓库(数据库)就被大量请求冲击,差点瘫痪。

如果缓存中的某个热点数据过期了,而此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库就很容易被高并发请求冲垮

注意:缓存击穿的关注点是热点数据不存在缓存上,因为如果是普通数据,那就是正常的缓存未命中而已,反之热点数据如果没命中,就容易导致大量的请求落到了数据库上
在这里插入图片描述

解决方案

应对缓存击穿,常见有如下四种解决方案:

  1. 设置热点数据的热度时间窗口
  2. 设置缓存永不过期
  3. 使用互斥锁或者分布式锁
  4. 异步更新缓存

第一种方案,设置热点数据的热度时间窗口

零食快过期了?我直接延长你保质期!

对于热点数据,可以设置一个热度时间窗口,在这个时间窗口中,如果一个数据被频繁访问,就将其缓存时间延长,避免频繁刷新缓存导致缓存击穿

第二种方案,使用互斥锁或分布式锁

只准一个人冲进仓库去找!

保证同一时间只有一个业务线程更新缓存,未能获取到互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值

实现互斥锁的时候,最好设置超时时间,不然第一个请求拿到了锁,然后这个请求发生了某种意外而一直不阻塞,一直不释放锁,这是其他请求也一直拿不到锁,整个系统就会出现无响应的现象

分布式锁的问题可以看看这篇文章:
Redis原理篇——分布式锁

第三种方案,缓存永不过期

没错,我们的食物没有保质期这一说,你见过矿泉水有保质期吗?你见过二锅头有保质期吗?

对于一些热点数据,可以将其缓存设置为永不过期,避免缓存击穿

第四种方案,异步更新缓存

专门雇了个店员,每天检查食物保质期并更换货架食物和仓库食物,不需要我操心~

不给热点数据设置过期时间,使用一个后台线程,去检测缓存是否失效,如果失效了,就去更新缓存,属于主动更新缓存的方式,相比缓存失效之后,遇到了大量请求被动更新的方式,可以避免高峰期的缓存失效而引发的性能问题

缓存雪崩

有一天,你发现货架上有一批同时进货的零食(比如说薯片,奥利奥,妙妙脆),都到了过期时间,就把他们都下架了。结果第二天,来了大量的顾客,一个要薯片,一个要奥利奥,一个要妙妙脆,然后货架(缓存)上都没有,于是全部的顾客冲进了你的仓库(数据库),直接就把你仓库(数据库)挤爆了!!

大量缓存数据在同一时间过期 或者 Redis 故障宕机(货架坏了食物也没法吃了)时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。

发生场景

  • 场景1:缓存集中失效。比如为了双十一,将一批商品放入到缓存中,设置两小时过期,凌晨2点过期了,导致对这一批商品的访问都落到了数据库,数据库就会产生压力波峰。
  • 场景2:当然缓存雪崩一个最严重特殊情况是,在流量高峰,一个缓存节点直接出现问题,甚至扩大到缓存集群出现问题,那么就会导致本应该访问缓存的流量透传到数据库上。

解决方案

可以看到,发生缓存雪崩有两个原因:

  • 大量数据同时过期;
    在这里插入图片描述

  • Redis 故障宕机;

在这里插入图片描述

不同的诱因,应对的策略也会不同。

针对 大量数据同时过期

  1. 设置缓存数据的随机过期时间
  2. 分布式锁或互斥锁
  3. 数据预热
  4. 后台更新缓存
  5. 数据库优化

第一种方案,设置缓存数据的随机过期时间
如果要给缓存数据设置过期时间,应该避免将大量的数据设置为同一个过期时间,我们可以给缓存数据设置过期时间时,加上一个随机数,这样就保证数据不会再同一时间过渡

第二种方案,分布式锁或互斥锁
与缓存击穿一样,保证同一时间只有一个业务线程更新缓存,未能获取到互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值
当然,最好设置超时时间

第三种方案,数据预热
在系统启动或者非高峰期时,提前将热点数据加载到缓存中,这样即时在高并发时,也能够从缓存中获取到数据,减轻数据库的压力

第四种方案,后台更新缓存
与缓存击穿一样,将更新缓存的工作交由后台线程定时更新

第五种方案,数据库优化
除了缓存层面的应对策略,还可以从数据库层面进行优化,如提升数据库性能、增加数据库的容量等,以应对大量请求导致的数据库压力

针对 Redis 故障宕机
针对 Redis 故障宕机而引发的缓存雪崩问题,常见的应对方法有下面这几种:

  • 服务熔断或请求限流机制
  • 构建 Redis 缓存高可靠集群

第一种方案,服务熔断或请求限流机制

一个都别进仓库了(服务熔断)! 好吧,就放几个进去哈(请求限流)!

因为 Redis 故障宕机而导致缓存雪崩问题时,我们可以启动服务熔断机制,暂停业务应用对缓存服务的访问,直接返回错误,不用再继续访问数据库,从而降低对数据库的访问压力,保证数据库系统的正常运行,然后等到 Redis 恢复正常后,再允许业务应用访问缓存服务。

服务熔断机制是保护数据库的正常允许,但是暂停了业务应用访问缓存服系统,全部业务都无法正常工作

为了减少对业务的影响,我们可以启用请求限流机制,只将少部分请求发送到数据库进行处理,再多的请求就在入口直接拒绝服务,等到 Redis 恢复正常并把缓存预热完后,再解除请求限流的机制。

第二种方案,构建 Redis 缓存高可靠集群

服务熔断或请求限流机制是缓存雪崩发生后的应对方案,我们最好通过主从节点的方式构建 Redis 缓存高可靠集群

如果 Redis 缓存的主节点故障宕机,从节点可以切换成为主节点,继续提供缓存服务,避免了由于 Redis 故障宕机而导致的缓存雪崩问题。

主从架构可以看看之前写的这篇文章哈

Redis实战篇——搭建主从复制

总结

三者区分

注意要区分好缓存穿透、缓存击穿和缓存雪崩三者之间的区别

缓存穿透,顾名思义,“穿” 了缓存,“透” 了数据库,数据既不存在缓存中,也不存在数据库中

缓存击穿,主要针对的是一个热点数据,他不存在于缓存,导致大量的请求访问数据库

缓存雪崩,主要针对的是一批热点数据,他们不存在于缓存,导致大范围的数据请求访问数据库

三者原因

缓存穿透的原因呢,一方面可能是黑客恶意攻击,另一方面可能是业务失误把数据删除

缓存击穿的原因呢,主要就是热点数据过期

缓存雪崩的原因呢,一方面可能是大量数据缓存中过期,另一方面是缓存直接宕机

三者解决方案

针对各自的原因,采取相应的方案
对于缓存穿透,可以限制非法请求回写特殊值(空值或默认值),使用布隆过滤器

对于缓存击穿
针对热点数据,可以设置过期时间延长或者直接设置为永不过期
针对缓存更新,可以在失效时使用互斥锁或者后台去更新缓存

对于缓存雪崩
针对大量数据同时过期,可以像缓存击穿一样,互斥锁后台更新缓存或者随机设置过期时间
也可以预热数据,甚至直接优化数据库
针对缓存故障,采取服务熔断或者请求限流机制,也可以直接搭建高可用集群

相关文章:

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!! 缓存穿透发生场景解决方案 缓存击穿解决方案 缓存雪崩发生场景解决方案 总结三者区分三者原因三者解决方案 想象一下,你开了一家便利店,店里…...

[code snippet] 生成随机大文件

[code snippet] 生成随机大文件 一个无聊的测试代码,因为要测试大文件的网络传输,就写了一个随机大文件生成脚本,做个备份。 基本上都是 GPT 生成的,哈哈。 C# 代码 namespace ConsolePlayground;internal class BigFileGenera…...

计算机网路面试HTTP篇三

HTTPS RSA 握手解析 我前面讲,简单给大家介绍了的 HTTPS 握手过程,但是还不够细! 只讲了比较基础的部分,所以这次我们再来深入一下 HTTPS,用实战抓包的方式,带大家再来窥探一次 HTTPS。 对于还不知道对称…...

如何不改变 PostgreSQL 列类型#PG培训

开发应用程序并在其背后操作数据库集群时,会遇到一个意想不到的问题是实践与理论、开发环境与生产之间的差异。这种不匹配的一个完美例子就是更改列类型。 #PG考试#postgresql培训#postgresql考试#postgresql认证 关于如何在 PostgreSQL(以及其他符合 SQ…...

RocketMQ快速入门:事务消息原理及实现(十)

目录 0. 引言1. 原理2. 事务消息的实现2.1 java client实现(适用于spring框架)2.2 springboot实现 3. 总结 0. 引言 rocketmq 的一大特性就是支持事务性消息,这在诸多场景中有所应用。在之前的文章中我们已经讲解过事务消息的使用&#xff0…...

Kotlin设计模式:深入理解桥接模式

Kotlin设计模式:深入理解桥接模式 在软件开发中,随着系统需求的不断增长和变化,类的职责可能会变得越来越复杂,导致代码难以维护和扩展。桥接模式(Bridge Pattern)是一种结构型设计模式,它通过…...

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述 在现代的分布式系统和实时数据处理领域,消息中间件扮演着关键的角色,用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中,Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特…...

【UE5.3】笔记6-第一个简单小游戏

打砖块小游戏: 1、制造一面砖块组成的墙 在关卡中放置一个cube,放这地面上,将其转换成蓝图类,改名BP_Cube,更换砖块的贴图,按住alt键进行拷贝,堆出一面墙,复制出来的会很多,全选移动…...

LeetCode---402周赛

题目列表 3184. 构成整天的下标对数目 I 3185. 构成整天的下标对数目 II 3186. 施咒的最大总伤害 3187. 数组中的峰值 一、构成整天的下标对数目 I & II 可以直接二重for循环暴力遍历出所有的下标对,然后统计符合条件的下标对数目返回。代码如下 class So…...

循环冗余校验

循环冗余校验(Cyclic Redundancy Check,简称CRC)是一种广泛使用的错误检测编码技术,用于检测数据在传输或存储过程中是否发生错误。CRC通过在数据后面添加一个校验值(通常称为CRC码或CRC校验和)来实现错误检…...

resample sensor

resample sensor 的一个问题。 背景: 项目要求,发送多个数据到 sensor-hal 上去,发现无论怎样,在 sensor-hal 上都 只有一个数据。 resample sensor 是重新采样,这个怎么理解的,我的理解是: 假设 sensor 采…...

【Linux】多线程的相关知识点

一、线程安全 1.1 可重入 VS 线程安全 1.1.1 概念 线程安全:多个线程并发执行同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁的保护的情况下,会出现问题。重入:同一个函数被不同…...

Java反射详解

Java反射 一.什么是反射 我们使用的一些像框架,tomcat,或者一些其他的组件(jackson 对象–>json)。他们可以做到给他什么类名,就可以创建给定类的对象,并调用该对象的方法和属性。这是如何做到的? 当他们加载我们…...

Spring Boot与Apache Kafka集成的深度指南

Spring Boot与Apache Kafka集成的深度指南 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代分布式系统中,消息队列的作用愈发重要&#xff0…...

甄选版“论软件系统架构评估”,软考高级论文,系统架构设计师论文

论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…...

uniapp开发企业微信内部应用

最近一直忙着开发项目,终于1.0版本开发完成,抽时间自己总结下在项目开发中遇到的技术点。此次项目属于自研产品,公司扩展业务,需要在企业微信中开发内部应用。因为工作中使用的是钉钉,很少使用企业微信,对于…...

0122__linux之eventfd理解

linux之eventfd理解-CSDN博客 Linux fd 系列 — eventfd 是什么?-CSDN博客...

数学建模 —— 查找数据

目录 百度搜索技巧 完全匹配搜索:查询词的外边加上双引号“ ” 标题必含关键词:查询词前加上intitle: 搜索文档:空格再输入filetype:文件格式 去掉不想要的:查询词后面加空格后加减号与关键字 知网查文献 先看知网的硕博士…...

合并有序链表

合并有序链表 图解代码如下 图解 虽然很复杂,但能够很好的理解怎么使用链表,以及对链表的指针类理解 代码如下 Node* merge_list_two_pointer(List& list1, List& list2) {Node* new_head1 list1.head;Node* new_head2 list2.head;Node* s…...

【SpringBoot Web框架实战教程】05 Spring Boot 使用 JdbcTemplate 操作数据库

不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,微信:xxh_1459,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了…...

Spark基于DPU的Native引擎算子卸载方案

1.背景介绍 Apache Spark(以下简称Spark)是一个开源的分布式计算框架,由UC Berkeley AMP Lab开发,可用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习&a…...

Mini2440 start.s 修改支持串口输出,方便调试 (四)

经常会遇到点板子的时候,板子没有任何反应!怎么知道板子有没有在正常启动,在uboot阶段 start.s 中加入串口打印信息是很有必要的! 输出串口信息 ***UART:mini-2440-uBoot*** ***UART:mini-2440-uBoot*** ***UART:mini-2440-uBoo…...

【教程】几种不同的RBF神经网络

本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com 目录 一、经典RBF神经网络1.1.经典径向基神经网络是什么1.2.经典径向基神经网络-代码与示例 二、广义回归神经网络GRNN2.1.广义回归神经网络是什么2.2.广义回归神经网络是什么-代码与示例 三、概率…...

【Liunx-后端开发软件安装】Liunx安装FDFS并整合nginx

【Liunx-后端开发软件安装】Liunx安装nacos 文章中涉及的相关fdfs相关软件安装包请点击下载: https://download.csdn.net/download/weixin_49051190/89471122 一、简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括…...

【Java笔记】Flyway数据库管理工具的基本原理

文章目录 1. 工作流程2. 版本号校验算法3. 锁机制3.1 为什么数据库管理工具需要锁3.2 flyway的锁机制 Reference 最近实习做的几个项目都用到了Flyway来做数据库的版本管理,顺便了解了下基本原理,做个记录。 详细的使用就不写了,网上教程很多…...

国际数字影像产业园创业培训,全面提升创业能力!

国际数字影像产业园作为数字影像产业的创新高地,致力于提供全面的创业支持服务。其中,创业培训作为重要的组成部分,旨在通过系统的课程设置和专业的讲师团队,为创业者提供从基础到进阶的全方位指导,帮助他们在数字影像…...

pyqt5 制作视频剪辑软件,切割视频

该软件用于切割视频,手动选取视频片段的起始帧和结束帧并保存为json文件。gui界面如下:包含快进、快退、暂停等功能, 代码如下: # codingUTF-8 """ theme: pyqt5实现动作起始帧和结束帧的定位,将定位到…...

VUE----通过nvm管理node版本

使用 NVM(Node Version Manager)来管理和切换 Node.js 版本是一个很好的选择。以下是在 苹果电脑macos系统 上使用 NVM 安装和切换 Node.js 版本的步骤: 1. 安装 NVM 如果你还没有安装 NVM,可以按照以下步骤进行安装&#xff1a…...

R语言进行字符的替换和删减gsub,substr函数

目录 R语言读文件“-“变成“.“ 提取列字符前几个 提取列字符末尾几个 进行字母替换 paste0函数使用 长宽数据转换 R语言读文件“-“变成“.“ R语言读文件“-“变成“.“_r语言 列名中的-变成了点-CSDN博客 怎样将"."还原为"-" rm(list = ls()…...

2024年6月27日,欧盟REACH法规新增第31批1项SVHC高关注物质

ECHA公布第31批1项SVHC,物质已增至241项 2024年6月27日,ECHA公布第31批1项SVHC,总数达241项。新增物质未包括磷酸三苯酯,仍在评议中。REACH法规要求SVHC含量超0.1%需告知下游,出口超1吨须通报ECHA。SCIP通报要求SVHC含…...

高通410-linux棒子设置网络驱动

1.首先打开设备管理器 2.看到其他设备下的RNDIS,右键更新驱动程序 3.点击浏览我的电脑… 最后一个...

PostgreSQL的系统视图pg_stat_archiver

PostgreSQL的系统视图pg_stat_archiver 在 PostgreSQL 数据库中,pg_stat_archiver 视图提供了关于归档进程(archiver process)的统计信息。归档进程负责将 WAL(Write-Ahead Logging)日志文件复制到归档存储&#xff0…...

【D3.js in Action 3 精译】第一部分 D3.js 基础知识

第一部分 D3.js 基础知识 欢迎来到 D3.js 的世界!可能您已经迫不及待想要构建令人惊叹的数据可视化项目了。我们保证,这一目标很快就能达成!但首先,我们必须确保您已经掌握了 D3.js 的基础知识。这一部分提到的概念将会在您后续的…...

面试经验分享 | 渗透测试工程师(实习岗)

所面试的公司:某安全厂商 所在城市:南京 面试职位:渗透测试工程师实习岗位 面试过程: 腾讯会议(视频) 面试过程:整体流程就是自我介绍加上一些问题问题balabalabala。。。由于面的岗位是渗透…...

STM32 IWDG(独立看门狗)

1 IWDG简介 STM32有两个看门狗:一个是独立看门狗(IWDG),另外一个是窗口看门狗。独立看门狗也称宠物狗,窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…...

ios swift5 获取wifi列表

参考博客: iOS之Wifi开发探究 - 稀土掘金 iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架 - 稀土掘金 iOS获取Wifi列表详解 - 简书...

回溯法c++学习 解决八皇后问题

使用回溯法解决八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在88 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。这…...

5. Spring IoCDI ★ ✔

5. Spring IoC&DI 1. IoC & DI ⼊⻔1.1 Spring 是什么?★ (Spring 是包含了众多⼯具⽅法的 IoC 容器)1.1.1 什么是容器?1.1.2 什么是 IoC?★ (IoC: Inversion of Control (控制反转))总…...

数据库自动备份到gitee上,实现数据自动化备份

本人有个不太好的习惯,每次项目的数据库都是在线上创建,Navicat 连接线上数据库进行处理,最近有一个项目需要二次升级,发现老项目部署的服务器到期了,完蛋,数据库咩了!!!…...

探索 Spring Cloud Gateway:构建微服务架构的关键一环

1. 简介 在当今的分布式系统中,微服务架构已经成为了一种流行的架构模式。在微服务架构中,服务被拆分为小型、可独立部署的服务单元,这些服务单元能够通过网络互相通信,形成一个整体的应用系统。然而,随着微服务数量的…...

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…...

C++ | Leetcode C++题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; class Solution {const int L 10;unordered_map<char, int> bin {{A, 0}, {C, 1}, {G, 2}, {T, 3}}; public:vector<string> findRepeatedDnaSequences(string s) {vector<string> ans;int n s.length();if (n < L…...

构建、标记和发布镜像

构建、标记和发布镜像 目录 构建镜像标记镜像发布镜像实践 设置构建镜像推送镜像 在本指南中&#xff0c;您将学习以下内容&#xff1a; 构建镜像&#xff1a;基于Dockerfile构建镜像的过程。标记镜像&#xff1a;为镜像命名的过程&#xff0c;这也决定了镜像的分发位置。发…...

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…...

首个实时 AI 视频生成技术发布;科大讯飞发布星火大模型 4.0 丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…...

什么是容器镜像

什么是容器镜像&#xff1f; 1. 容器镜像的两个重要原则 容器镜像是容器化应用程序的基础&#xff0c;它包含了运行应用程序所需的一切——代码、运行时、库和依赖项。理解容器镜像的两个重要原则非常重要&#xff1a; 不可变性&#xff1a;容器镜像一旦构建&#xff0c;就不…...

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址&#xff0c;选择与电脑系统相对应的版本&#xff1b;博主已经上传资源&#xff0c;或者点此直接免费下载&#xff0c;本次演示版本为8.14.1。 注意&#xff1a; Elasticsearch 5 需要 Java 8 以上版本&#xff1b;…...

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录&#xff1a;/sys/class/gpio /sys/class/gpio目录下文件如下图所示&#xff1a; 1.1 gpiochipX目录 功能&#xff1a;当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器&#xff0c;分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…...

单点登录方法

一、父域cookie:两个有相同父域名的二级域名之间可以跨域传递cookie //注意该接口的地址也是baidu.com下属的二级域名:a.baidu.com //全部接口地址为:a.baidu.com/dev-api/system/ecdWeb/login。如果不是a.baidu.com那么根本带不过去 //其实可以理解为通过该方法将cookie传给…...

springboot集成JPA并配置hikariCP连接池问题解决

一、引入需要的依赖 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/></parent> jpa依赖 <!--…...

js 复制文本带样式

一键复制带样式的html文本到邮件 <div><div idcopy-content><div style{{ fontSize: 16px,fontWeight: 500, lineHeight: 24px, color: #222, marginBottom: 16px }}>邀请您参加腾讯会议网络研讨会&#xff08;Webinar)</div></div><Button …...

javascript: void(0);用法和常见问题

在JavaScript中&#xff0c;void(0)是一个表达式&#xff0c;它用来获取一个特殊的值undefined&#xff0c;并且执行一个没有返回值的操作。这个表达式经常用于创建一个没有实际返回值的函数调用&#xff0c;或者在需要一个表达式的地方使用&#xff0c;但不希望有任何返回值。…...

近红外土壤养分速测仪:科学施肥的得力助手

在追求高产高质的现代农业中&#xff0c;对土壤养分的精确掌控显得至关重要。为了满足这一需求&#xff0c;近红外土壤养分速测仪凭借其高性价比和出色的性能&#xff0c;成为了土壤科学施肥的得力助手。 近红外土壤养分速测仪采用了先进的LED冷光源技术&#xff0c;保证了光源…...

private修饰的方法或属性能被子类继承嘛?

先说结论&#xff1a;能。 这是一个反直觉的问题&#xff0c;毕竟大家在学习阶段接收到的知识就是&#xff1a;被privaite修饰的方法和成员变量不能被继承。 证明过程可参考文档&#xff1a;private修饰的变量如何调用_你真的熟悉java继承关系&#xff1f;那你知道父类private…...

VScode Python debug:hydra.run.dir 写入launch.json

记录一个debug时的经验&#xff1a; VS code extension名称版本Pythonv2024.8.1Python Debuggerv2024.6.0 我配置的project运行 train.py 时需要在 terminal 输入参数 hydra.run.dirxxx 我想用 vscode debug 查看内部代码&#xff0c;按以往的经验需要将args写入launch.json&…...

每天一个数据分析题(四百零二)- 线性回归模型

线性回归模型的经典假设不包含&#xff08;&#xff09; A. 扰动项均值为零&#xff0c;同方差性 B. 自变量之间不相关&#xff0c;不存在时间序列之类的关系 C. 残差项与自变量之间不相关 D. 因变量的方差随自变量的不同而变化 数据分析认证考试介绍&#xff1a;点击进入…...

2024年全球汽车零部件供应商百强榜出炉:宁德时代排第4!国轩高科新上榜

6月23日,《美国汽车新闻》重磅发布了2024年全球汽车零部件供应商百强榜。值得一提的是,今年上榜的中国企业又多了两家,分别是国轩高科和三花汽零,另外宁德时代的排名又上升了一位,目前仅次于博世、采埃孚和麦格纳国际这三家传统零部件巨头。中国企业一共上榜15家,其中前5…...

卷出花来!比亚迪海狮07首搭天神之眼五月新车个个有看点

五月虽然不是传统的车市旺季,但仍然有多款重磅新车即将上市,包括比亚迪全新SUV海狮07 EV、智己L6、沃尔沃EX30,三款全新新能源车型要颜值有颜值,要性能有性能,近期想要入手新车的准车主们值得关注。比亚迪海狮07上市日期:5月10日4月25日,比亚迪旗下全新中型SUV——海狮07…...

解决GoLand无法Debug

goland 调试的的时候提示如下错误 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.3 (maximum supported v 其实个原因是因为正在使用的Delve调试器版本太旧&#xff0c;无法兼容当前的Go语言版本1.22.3。Delve是Go语言的一个调试工具&#…...

Git-01

Git是一个免费且开源的分布式版本控制系统&#xff0c;它可以跟踪文件的修改、记录变更的历史&#xff0c;并且在多人协作开发中提供了强大的工具和功能。 Git最初是由Linus Torvalds开发的&#xff0c;用于Linux内核的开发&#xff0c;现在已经成为了广泛使用的版本控制系统&a…...

NLP与训练模型-GPT-3:探索人工智能语言生成的新纪元

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是备受关注的研究方向之一。随着深度学习技术的发展&#xff0c;尤其是Transformer模型的出现&#xff0c;NLP领域取得了巨大的进步。其中&#xff0c;由OpenAI推出的GPT-3模型更是引起了广泛的关注和热…...

酷黑简洁大气体育直播自适应模板赛事直播门户网站源码

源码名称&#xff1a;酷黑简洁大气体育直播自适应模板赛事直播门户网站源码 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 支持PC与手机端同步生成html&#xff08;多端同步生成插件&#xff09; 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无…...