缓存预热/雪崩/穿透/击穿

news2024/9/20 0:57:14

1. 缓存预热

预先将MySQL中的数据同步至Redis的过程

2. 缓存雪崩

Redis主机出现故障,或有大量的key同时过期大面积失效导致Redis不可用

  • Redis中key设置为永不过期,或者过期时间错开
  • Redis缓存集群实现高可用
  • 多缓存结合预防雪崩
  • 服务降级

3. 缓存穿透

每次请求数据Redis上都没有,导致MySQL压力增大,此时Redis形同摆设

  • 空对象缓存或者缺省值

回写增强

如果发生了缓存穿透,我们可以针对要查询的数据,在Redis里存一个和业务部门商量后确定的缺省值(比如,零、负数、defaultNull等)。

比如,键uid:abcdxxx,值defaultNull作为案例的key和value

先去redis查键uid:abcdxxx没有,再去mysql查没有获得 ,这就发生了一次穿透现象。

 

but,可以增强回写机制

 

mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。

第一次来查询uid:abcdxxx,redis和mysql都没有,返回null给调用者,但是增强回写后第二次来查uid:abcdxxx,此时redis就有值了。

可以直接从Redis中读取default缺省值返回给业务应用程序,避免了把大量请求发送给mysql处理,打爆mysql。

 

但是,此方法架不住黑客的恶意攻击,有缺陷......,只能解决key相同的情况

黑客会对你的系统进行攻击,拿一个不存在的id去查询数据,会产生大量的请求到数据库去查询。可能会导致你的数据库由于压力过大而宕掉。


key相同
第一次打到mysql,
空对象缓存后第二次就返回defaultNull缺省值,
遥免mysql被攻击,不用再到数据库中去走一圈了

key不同
由于存在空对象缓存和缓存回写(看自己业务不限死),
redis中的无关紧要的key也会越写越多(记得设置redis过期时间)

  • 布隆过滤器

Guava布隆过滤器 

<!--guava Google 开源的 Guava 中自带的布隆过滤器-->
<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>23.0</version>
</dependency>
package com.example.redis;

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class GuavaBloomFilterTest {

    @Test
    public void test() {
        // 创建一个布隆过滤器 过滤整数值,预计插入元素为100
        BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 100);
        // 判断指定元素是否存在
        boolean contain = bloomFilter.mightContain(1);
        System.out.println(contain);
        // 将元素新增入布隆过滤器
        bloomFilter.put(1);
        contain = bloomFilter.mightContain(1);
        System.out.println(contain);

    }
}

4. 缓存击穿

大量请求同时查询一个key时,该key刚好失效,导致大量请求打到数据库上(热点key失效)

  • 差异失效时间,或者不设置失效时间
  • 互斥更新,采用双检加锁策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机-AT24C02(IIC总线介绍及其时序编写步骤)-第一节(下一节实战)

IIC开始通信&#xff08;6大步&#xff09; 我以前的文章也有对基本常用的通信协议讲解&#xff0c;如SPI UART IIC RS232 RS485 CAN的讲解&#xff0c;可前往主页查询&#xff0c;&#xff08;2024.9.12,晚上20&#xff1a;53&#xff0c;将AT24C02存储芯片&#xff0c;掉电不…

Element UI按钮组件:构建响应式用户界面的秘诀

Element UI按钮组件&#xff1a;构建响应式用户界面的秘诀 一 . 创建按钮二 . 按钮的属性2.1 type 属性2.2 朴素按钮、圆角按钮2.3 size 属性2.4 圆形按钮2.5 加载状态2.6 禁用功能2.7 默认聚焦 三 . 按钮组 在现代网页设计中&#xff0c;按钮不仅是用户交互的核心元素&#xf…

即插即用篇 | YOLOv10 引入组装式Transformer模块AssembleFormer | arXiv 2024

本改进已同步到YOLO-Magic框架! 摘要—早期检测和准确诊断可以预测恶性疾病转化的风险,从而增加有效治疗的可能性。轻微的症状和小范围的感染区域是一种不祥的警告,是疾病早期诊断的重中之重。深度学习算法,如卷积神经网络(CNNs),已被用于分割自然或医学对象,显示出有希…

保姆级离线+windows环境+大模型前端UI安装(二)

看到很多文章采用docker在windows环境安装python或者是linux环境再装webui的&#xff0c;感觉比较麻烦&#xff0c;不够简洁&#xff0c;本文采用nodejs&#xff0c;来作为客户端引擎。 这篇只讲客户端安装&#xff0c;需要安装后端大模型及其运行的可以参考第一篇&#xff1a…

Vue入门学习笔记-表单

可以使用v-model 指令在表单控件元素上创建双向数据绑定。 引言&#xff1a; Vue采用了MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式&#xff0c;通过指令可以快速实现数据和视图的双向绑定 修改视图层时&#xff0c;模型层也会改变&#xff1b;修改模型层&#…

【软考】程序设计语言基础

【软考】程序设计语言基础 一.程序设计语言基础概念 计算机要通过程序或指令来控制才能完成各种任务。程序设计语言&#xff08;计算机语言&#xff09;&#xff1a;人与机器交换信息的语言。 1.程序设计语言 计算机语言大致分为机器语言、汇编语言和高级语言三种。机器语言…

迁移学习:让你的深度学习模型更聪明的秘密武器

在深度学习领域&#xff0c;训练一个高效的模型通常需要大量的标注数据和计算资源。然而&#xff0c;获取这样的数据并不总是容易。幸运的是&#xff0c;迁移学习为我们提供了一种解决方案&#xff0c;它允许我们利用已有模型的知识&#xff0c;从而在新任务上获得更好的性能。…

被要求撤回Blackwell?一家初创企业称英伟达侵权自家技术,忍无可忍!英伟达和伙伴微软被齐齐告上法庭,赔偿或高达数十亿!

刚刚&#xff0c;一家初创公司居然把巨头英伟达和微软一起告了&#xff01; 名为Xockets的初创公司在诉讼中称&#xff0c;英伟达和微软公司窃取了其DPU技术&#xff0c;用以开发AI产品&#xff0c;并相互串通以压低其技术的价格&#xff0c;是名副其实的垄断行为&#xff01;…

C语言16--宏定义和关键字

预处理 在C语言程序源码中&#xff0c;凡是以井号&#xff08;#&#xff09;开头的语句被称为预处理语句&#xff0c;这些语句严格意义上并不属于C语言语法的范畴&#xff0c;它们在编译的阶段统一由所谓预处理器&#xff08;cc1&#xff09;来处理。所谓预处理&#xff0c;顾名…

有没有视频加字幕免费软件?值得收藏的10款字幕编辑软件推荐!

随着视频成为我们生活中不可或缺的一部分&#xff0c;它已然成为信息传播的重要方式。然而&#xff0c;仅有精彩的内容还不足以吸引全球观众&#xff0c;字幕的加入显得尤为重要。不仅能帮助不同语言的用户理解视频内容&#xff0c;还能提升视频的互动性。许多视频制作爱好者开…

Linux 防火墙:iptables (一)

文章目录 iptables 概述netfilter 与 iptables 的关系 四表五链规则表规则链数据包处理的优先顺序与规则链匹配顺序规则表的优先顺序规则链的匹配顺序规则链内的匹配顺序匹配流程示意图 安装与格式iptables 的安装iptables 防火墙的配置方法iptables 命令行配置方法常用的控制类…

20道经典自动化测试面试题【建议收藏】

概述 觉得自动化测试很难&#xff1f; 是的&#xff0c;它确实不简单。但是学会它&#xff0c;工资高啊&#xff01; 担心面试的时候被问到自动化测试&#xff1f; 嗯&#xff0c;你担心的没错&#xff01;确实会被经常问到&#xff01; 现在应聘软件测试工程师的岗位&…

圆锥曲线练习

设 A ( x 1 , y 1 ) , B ( x 2 , y 2 ) A\left( x_{1}, y_{1} \right), B\left( x_{2}, y_{2} \right) A(x1​,y1​),B(x2​,y2​) l : y k ( x 2 ) l: y k\left( x2 \right) l:yk(x2) 显然 y 0 y0 y0符合题意 当 k ≠ 0 k\neq 0 k0 联立 l l l和 C C C ( k 2 1 2 ) x…

基于SpringBoot+Vue+MySQL的校园周边美食探索及分享平台

系统背景 在当今数字化时代&#xff0c;校园生活正日益融入信息技术的浪潮之中&#xff0c;学生们对于便捷、高效且富有趣味性的生活方式有着越来越高的追求。特别是在饮食文化方面&#xff0c;随着校园周边餐饮业态的日益丰富&#xff0c;学生们渴望一个能够集美食探索、分享与…

SpringBoot入门(黑马)

1. SpringBootWeb入门开发 需求&#xff1a;使用SpringBoot 开发一个web 应用&#xff0c;浏览器发起请求 /hello 后&#xff0c;给浏览器返回字符串"Hello World~"。 步骤&#xff1a; 1. 创建springBoot工程&#xff0c;并勾选web开发相关依赖。 2. 定义 HelloCo…

iOS——strong和copy的底层实现

copy和strong的区别 有如下代码&#xff1a; #import "Person.h"interface Person ()property (nonatomic, strong) NSString *strStrong; property (nonatomic, copy) NSString *strCopy;endimplementation Person- (void) go {NSMutableString *newStr [NSMutab…

【前端】 flex布局详解

Flex布局开启&#xff0c;在编写之前&#xff0c;我们要先搞清楚一个问题&#xff0c;就是你要让谁开启flex布局&#xff1f;我们要开启flex布局的最终目的一定是为了让某几个元素进行规范化布局&#xff0c;那如果你单独写在某个元素身上&#xff0c;那它的兄弟元素也不知道自…

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

XDMA IP核两种模式 Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中&#xff0c;支持普通的XDMA模式&#xff0c;但是这种模式只允许主机端发起PCIe 读写请求&#xff0c;FPGA内部无法主动发起读写请求&#xff0c;也即FPGA无法主动读写HOST的内存。 而该IP核的另一种…

超分论文ESPCN解读

论文地址&#xff1a;Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network 相关知识点总结&#xff1a; 许多SR技术的一个关键假设是&#xff0c;大部分高频数据是冗余的&#xff0c;因此可以从低频分量中准确重建…

IIC时序(通俗易懂版,嘎嘎简单)

介绍 简述&#xff1a;IIC总线就是一个两根线的规则&#xff08;半双工&#xff09;&#xff0c;规定通信双方如何传送数据&#xff0c;至于传送数据&#xff0c;无非就是主机给从机发送数据&#xff0c;或者从机给主机发送数据&#xff0c;其中加了一点发过去的数据有没有回应…