通俗易懂Redis缓存穿透,缓存击穿,缓存雪崩

1.1 缓存穿透

原因:当我们查询一个数据的时候,缓存中没有,就会去查询我们的关系型数据库,而且查询不到的数据是不会放到我们的缓存中,就会导致我们每次的请求都会来到我们的关系型数据库中,从而导致关系型数据库宕机。

解决:

(1)缓存空数据:查询返回的数据为空,仍把这个空结果进行缓存

优点:简单

缺点:消耗内存,可能发生缓存与数据库不一致(万一,后面的时候,我们在关系型数据库存储了这个数据呢)

(2)布隆过滤器:当我们在查询redis数据库之前,我们要先查询布隆过滤器,若不存在,直接pass,布隆过滤中存在,则查redis,但前提是在做缓存预热的时候,要初始化好布隆过滤器。

优点:它是二进制数组组成的内存占用少,且基于我们数组的特性,查询也是非常快的

缺点:实现复杂,存在误判。


简介 布隆过滤器

布隆过滤器:快速判断一个元素是否存在于一个集合中。它通过使用bit数组多个哈希函数来实现

数据经过我们一系列的hash函数运算算出来对应的hash值,然后映射到我们的二进制的数组下标,然后标记,把对应的0变成1。

优点:它是二进制数组组成的内存占用少,且安全性好,且基于我们数组的特性,查询也是非常快的。

缺点:它是一个概率性的数据结构,存在一定的误判率,即可能判断一个元素存在于集合中,但实际上并不存在。因为他是应该hash函数运算的,可能两个值的hash函数值一样。其次,无法删除已插入的元素,因为删除元素会影响其他元素的判断结果。最后我们要权衡一下误判率,数组越大,hash函数越大,误判率越小。同时我们的内存占用空间也会变大很多,查询起来,也比较费时间。我们项目中一般是5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。

RedissonClient中自带了布隆过滤器,我们可以设置长度和误差率。

  • 若数据库中存在数据,那么布隆过滤器就会在该数据请求过后标记数据的存在,从而避免大量不存在数据请求数据库

1.2 缓存击穿

原因:当某一个key设置的时间过期了,恰好key过期这个时间点有大量的并发请求过来,这些并发请求可能瞬间把DB压垮。(虽然我们数据库查询到的数据,会存储redis,但:存储需要一定时间

解决方案:

  • 对于热点数据我们可以先不设置过期时间,或在访问数据的时候,对数据过期时间进行续期。
  • 使用分布式锁,当缓存失效的时候,不是先从数据库中加载,而是先获取分布式锁,获取分布式锁的线程从数据库查询数据后写回到缓存中,后续没有获取锁的线程只需要等待和重试即可。这样就能避免大量请求压到数据库,虽然牺牲了一定的性能,但确保了数据库的一个稳定性。

1.3 缓存雪崩

缓存雪崩:同一时间段大量的缓存key同时失效或者Redis服务宕机,导致大量的请求到达数据库,带来压力。

与缓存穿透区别:这是大量的key 穿透是一个key

解决方案:

将缓存失效时间分散开,例如:在原有的时间上增加一个随机值,这样缓存的重复率就会降低很多。

拓展:

(1)给业务增加多级缓存:Guava或者Caffenie

(2)给缓存业务增加降级限流策略:ngxin 或 Spring cloud gateway

Redis宕机这个:可以用Redis集群提高服务的可用性(哨兵模式,集群模式)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 ccfcsp认证打卡 2021 12 01 序列查询

2021 12-1 序列查询 题解1题解2区别第一种算法:第二种算法: 题解1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);// 输入n表示商品数目,N表示总数int n sc.n…

Vitis AI——FPGA学习笔记<?>

参考资料: Xilinx/Vitis-AI-Tutorials (github.com) Xilinx/Vitis-AI: Vitis AI is Xilinx’s development stack for AI inference on Xilinx hardware platforms 【03】ALINX Zynq UltraScale MPSoC XILINX FPGA视频教程Vitis AI开发 一. 简介 1.简介 边缘计…

产品推荐 | 基于华为海思ARM+Xilinx FPGA双核的8路SDI高清视频图像处理平台

一、板卡概述 PCIE703 是我司自主研制的一款基于 PCIE 总线架构的高性能综 合视频图像处理平台,该平台采用 Xilinx 的高性能 Kintex UltraScale 系列 FPGA 加上华为海思的高性能视频处理器来实现。 华为海思的 HI3531DV200 是一款集成了 ARM A53 四核处理 器性能强…

Django屏蔽Server响应头信息

一、背景 最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。 漏洞扫描信息和提示修复信息如下: 自然这些漏洞如何修复&#xff0c…

蓝桥杯嵌入式老竞赛板在MDK5上使用CooCox下载出现unknown device的问题

本文是在参考网上博客并经过实操解决自己遇到的问题总结而成,只是为了让后来者少走弯路。 本文是在在LED闪烁实验时遇到这个问题 蓝桥杯嵌入式老竞赛板在MDK5上使用CooCox下载出现unknown device的问题 环境:win11系统,keil MDK 518 老竞赛…

Leetcode的正确打开方式

很多新手朋友在学习完数据结构与算法之后,都想找个平台磨练自己的技艺。那么LeetCode绝对是不二之选。但是官网刷题不是很友好,那么今天给大家介绍一款刷LeetCode神器。也是未来工作之后的摸鱼神器。 leetcode-editor 本打工人的摸(nei&am…

新能源充电桩站场AI视频智能分析烟火检测方案及技术特点分析

新能源汽车充电起火的原因多种多样,涉及技术、设备、操作等多个方面。从技术层面来看,新能源汽车的电池管理系统可能存在缺陷,导致电池在充电过程中出现过热、短路等问题,从而引发火灾。在设备方面,充电桩的设计和生产…

人才测评系统 提升HR招聘和人岗管理

人才是一个企业的核心竞争力。商业社会的激烈竞争和种种挑战,实际上都是人才的竞争。企业的招聘,职位调动,晋升,人岗匹配的核心对象都是人。现如今,越来越多的企业引入了人才测评机制,但是一些HR却出现不理…

Day56:WEB攻防-CSRF请求伪造Referer同源置空配合XSSToken值校验复用删除

目录 CSRF-无检测防护-检测&生成&利用 CSRF-Referer同源-代码逻辑&上传&XSS CSRF-Token校验-值删除&复用&留空 知识点: 1、CSRF-原理&检测&利用&防御 2、CSRF-防御-Referer策略隐患 3、CSRF-防御-Token校验策略隐患 CSRF-无…

基于springboot的家庭理财管理系统的开发与实现

摘 要 在这科技不断的进步,让我们的生活改变了很多,信息技术的迅速发展,使各种行业在信息技术应用方面变得非常普遍。信息时代的到来,已成为一种必然趋势。本系统的标题是基于B/S模式的家庭理财系统的设计开发,其目的…

【Java常用的API】JDK8相关时间类

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

常见位运算方法

目录 基础位运算给一个数n,确定它的二进制表示中的第x位是0还是1将一个数n的二进制表示的第x位修改成1将一个数n的二进制表示的第x位修改成0提取一个数n的二进制表示中最右侧的1除去一个数n的二进制表示中最右侧的1异或(^)运算 基础位运算 给一个数n,确定…

树莓派3B及传感器测试实验

树莓派3B介绍 树莓派3B和树莓派4B参数比较 型号 Raspberry Pi 4B Raspberry Pi 3B CPU 1.5GHz,Quad-Core Broadcom BCM2711(Cortex A-72) 1.2GHz,Quad-Core Broadcom BCM2837 (Cortex A-53) RAM 1GB/2GB/4GB LPDDR4(取决于型号) 1G LPDDR2 GPU…

【使用 PyQt6-第01章】 创建基本的应用程序

使用 PyQt6 创建您的第一个应用程序 目录 一、说明二、创建应用程序三、单步执行代码四、什么是事件循环?4.1 Qt 中的事件循环。 五、主窗口 QMainWindow六、调整窗口和小部件的大小 一、说明 本教程也适用于 PySide6 、 PySide2 和 PyQt5 在本教程中,…

钉钉 AI 升级多种功能;智谱AI PC智能助手发布;百度回应与苹果合作

▶ 钉钉 AI 升级上线多种功能 3 月 28 日,钉钉 AI 助理升级。升级后上线了图片理解、文档速读、工作流等产品能力,率先探索多模态、长文本与 RPA 技术在 AI 应用的落地。 基于阿里通义千问大模型,升级后的钉钉 AI 助理可以做到: …

C++ —— C++11新增语法

目录 一,列表初始化 1.1 这是什么? 1.2 initializer_list 1.3 在容器的运用 1.4 STL中的变化 二,右值引用和左值引用 2.1 是什么? 2.2 这两个东西有啥关系? 2.3 有啥用? 三,*移动构…

Jmeter 配置说明之线程组

一、线程组介绍: 线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。所有的任务都是基于线程组: 通俗理解: 线程组:就是一个线程组,里面有若干个请求; 线程&am…

基于JSPM的美食推荐管理系统

背景 互联网的迅猛扩张彻底转变了全球各类组织的运营模式。自20世纪90年代起,中国各级政府和企事业单位便开始探索运用网络系统来处理管理事务。然而,早期的网络覆盖不广、用户接受度不高、相关网络法规不健全以及技术发展不成熟等因素,都曾…

Kubernetes-running app on kube

Docker 安装Docker 首先,您需要在Linux机器上安装Docker。如果您不使用Linux,则需要启动一个Linux虚拟机(VM)并在该虚拟机中运行Docker。如果你使用的是Mac或Windows系统,并按照指令安装Docker, Docker将为你建立一个虚拟机,并在…

uniapp-打包IOS的APP流程

打包前所需配置 在manifest文件内配置 1. APP图标 2. 启动界面 有三种启动界面配置 第一种是 HBuilderX 官方给的通用启动界面,页面单一,屏幕中间就一个圆框图标 第二种是自定义的启动图,无法通过AppStore的审核 第三种是自定义storyboard启动…