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

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

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 {@Testpublic void test() {// 创建一个布隆过滤器 过滤整数值,预计插入元素为100BloomFilter<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失效)

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

相关文章:

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

1. 缓存预热 预先将MySQL中的数据同步至Redis的过程 2. 缓存雪崩 Redis主机出现故障&#xff0c;或有大量的key同时过期大面积失效导致Redis不可用 Redis中key设置为永不过期&#xff0c;或者过期时间错开Redis缓存集群实现高可用多缓存结合预防雪崩服务降级 3. 缓存穿透 …...

C/C++:优选算法

一、双指针 1.1移动零 链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操…...

用于大数据分析的数据存储格式:Parquet、Avro 和 ORC 的性能和成本影响

高效的数据处理对于依赖大数据分析做出明智决策的企业和组织至关重要。显著影响数据处理性能的一个关键因素是数据的存储格式。本文探讨了不同存储格式&#xff08;特别是 Parquet、Avro 和 ORC&#xff09;对 Google Cloud Platform &#xff08;GCP&#xff09; 上大数据环境…...

【Jupyter Notebook】安装与使用

打开Anaconda Navigator点击"Install"&#xff08;Launch安装前是Install&#xff09;点击"Launch" 点击"File"-"New"-"Notebook" ​ 5.点击"Select"选择Python版本 6.输入测试代码并按"EnterShift"运…...

默认端口被占用后,如何修改Apache2 端口

你可以通过以下步骤修改 Apache2 的默认端口&#xff08;80 端口&#xff09;&#xff1a; 1. 修改 Apache2 配置文件 首先&#xff0c;你需要编辑 Apache2 的端口配置文件&#xff1a; sudo nano /etc/apache2/ports.conf在文件中&#xff0c;你会看到类似以下的内容&#…...

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(1)-CSDN博客 本节内容 实现目标 通过已经得到的Excel表格…...

Idea 中的一些配置

配置 javap jdk 自带的 javap 可以用来查看字节码信息。 配置过程&#xff1a; 打开设置&#xff0c;定位到 Tools&#xff0c;External Tools新建项&#xff0c;Program 中填 javap 的路径Argument 中填 -c $FileClass$Working directory 中填 $OutputPath$ Argument 中也…...

VulnHub DC-1-DC-7靶机WP

VulnHub DC系列靶机&#xff1a;https://vulnhub.com/series/dc,199/ # VulnHub DC-1 nmap开路获取信息 Nmap scan report for 192.168.106.133 Host is up (0.00017s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 1…...

基于DPU的容器冷启动加速解决方案

1. 方案背景 1.1. 业务背景 随着容器技术的迅猛发展与广泛应用&#xff0c;一种新的云计算服务模式应运而生-函数即服务&#xff08;FaaS, Function as a Service&#xff09;。FaaS作为一种无服务器&#xff08;Serverless&#xff09;计算方式&#xff0c;极大地简化了开发…...

SOME/IP 通信协议详细介绍

标签&#xff1a; SOME/IP 通信协议详细介绍&#xff1b; SOME/IP&#xff1b; SOME/IP 通信协议详细介绍 SOME/IP 通信协议详细介绍 官网&#xff1a; https://some-ip.com/ 1. 什么是SOME/IP&#xff1f; SOME/IP&#xff08;Scalable service-Oriented MiddlewarE over IP…...

基于Boost库的搜索引擎开发实践

目录 1.项目相关背景2.宏观原理3.相关技术栈和环境4.正排、倒排索引原理5.去标签和数据清洗模块parser5.1.认识标签5.2.准备数据源5.3.编写数据清洗代码parser5.3.1.编写读取文件Readfile5.3.2.编写分析文件Anafile5.3.2.编写保存清洗后数据SaveHtml5.3.2.测试parser 6.编写索引…...

【2023年】云计算金砖牛刀小试3

A场次题目:OpenStack平台部署与运维 业务场景: 某企业拟使用OpenStack搭建一个企业云平台,用于部署各类企业应用对外对内服务。云平台可实现IT资源池化,弹性分配,集中管理,性能优化以及统一安全认证等。系统结构如下图: 企业云平台的搭建使用竞赛平台提供的两台云服务…...

在以太坊中不同合约之间相互调用的场景有哪些?

在以太坊中&#xff0c;合约调用合约的场景有很多&#xff0c;以下是一些常见的情况&#xff1a; 一、复杂业务逻辑的拆分 模块化设计&#xff1a; 当一个智能合约的业务逻辑变得复杂时&#xff0c;可以将其拆分为多个较小的合约&#xff0c;每个合约负责特定的功能。例如&…...

关于 PC打开“我的电脑”后有一些快捷如腾讯视频、百度网盘、夸克网盘、迅雷等各种捷方式在磁盘驱动器上面统一删除 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/142029325 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

数据结构——初识数据结构

数据结构——初识数据结构 数据结构的概念数据的类型时间复杂度 数据结构的概念 相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机科学中的一个基本概念&#xff0c;它是指数据元素之间的关系和组织方式。数据结构是计算机存储、组织数据的方式&#xff0c;…...

每日搜索论坛回顾:2024年9月13日

Google正在测试一个新的广告标签标题&#xff0c;使广告更加明显。Google搜索排名的波动仍然非常剧烈&#xff0c;即使在核心更新完成一周后仍然如此。Google正在向本地服务广告的广告主发送验证通知。Bing正在测试带有评论来源图标的本地包。Google AdSense正在将自动广告扩展…...

猎板PCB大讲堂:PCB设计铺铜技巧与策略全解析

在电子工程领域&#xff0c;PCB的设计不仅仅是连接电子元件的桥梁&#xff0c;更是确保设备性能和稳定性的关键。铺铜&#xff0c;作为PCB设计中的一个微妙而强大的环节&#xff0c;常常被低估。 猎板PCB带您深入了解铺铜的艺术&#xff0c;探讨其背后的科学原理&#xff0c;以…...

Matplotlib - Statistical Distribution作图

1. 前言 在数据分析和统计学中&#xff0c;绘制统计分布图是非常重要的&#xff0c;因为它帮助我们直观地理解数据的特性&#xff0c;并为进一步的分析提供基础。统计分布图能够揭示数据集的结构、趋势、集中趋势和离散程度等信息&#xff0c;从而使我们更容易做出合理的假设、…...

【机器学习】9 ——最大熵模型的直观理解

系列文章目录 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前奏例子硬币垃圾邮件代码 前奏 【机器学习】6 ——最大熵模型 例子 硬币 假设我们有一枚硬币&#xff0c;可能是公平的&#xff0c;…...

1.单例模式

目录 简介 饿汉式 懒汉式 双重检测锁式 静态内部类式 枚举单例 测试 测试单例模式&#xff1a; 测试五种单例模式在多线程环境下的效率 问题&#xff08;拓展&#xff09; 例&#xff1a;反射破解单例模式 例&#xff1a;反序列化破解单例模式 总结&#xff1a;如何…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...