Redis01-缓存击穿、穿透和雪崩

目录

开场白-追命3连

使用场景

01缓存穿透场景与方案

02布隆过滤器

03缓存击穿场景与方案

04缓存雪崩场景与方案



开场白-追命3连

  • 看你项目中有说用到Redis,都是哪些场景使用了Redis呢?

  • 如果发生了缓存穿透、击穿、雪崩如何应对呢?缓存中数据的持久化和双写一致怎么实现的呢?数据过期和淘汰策略了解么?

  • 能说说Redis实现分布式锁的方案和原理么?

使用场景

01缓存穿透场景与方案

使用缓存是一种常见的性能优化和数据管理策略,它可以带来许多好处:

  1. 提高性能:缓存允许将常用或重复访问的数据存储在快速访问的位置,通常是内存中。这可以大大减少从慢速数据存储系统(如数据库)中读取数据的次数,从而显著提高应用程序的响应时间和性能。

  2. 减少资源消耗:读取和计算数据通常需要消耗计算资源和网络带宽。通过将结果缓存,可以减少这些资源的消耗,提高系统的效率。

  3. 降低数据库负载:数据库是许多应用程序的关键数据存储,频繁的数据库查询可以增加数据库的负载。通过缓存常用查询结果,可以减轻数据库的压力,提高数据库的可伸缩性。

  4. 减少网络延迟:从远程数据源(如云存储或远程API)获取数据通常需要较长的网络延迟。通过使用缓存,可以将数据放置在更接近应用程序的位置,从而降低网络延迟。

  5. 提高可伸缩性:使用缓存可以降低后端数据存储的压力,从而使应用程序更容易扩展,支持更多的用户和请求。

  6. 应对高并发:在高并发的情况下,数据库或其他数据源可能无法及时响应请求。缓存可以缓解这种情况,因为它可以快速提供响应,而不必等待慢速数据源的响应。

  7. 提高用户体验:快速加载和响应时间可以显著提高用户体验,减少等待时间,增加用户满意度。

  8. 实现断点恢复:在某些应用中,缓存可以用于存储临时状态或进度,以支持断点续传或恢复操作,如文件上传或长时间运行的任务。

  9. 保护后端资源:通过缓存来限制对某些资源的访问,可以防止滥用或意外的流量对后端资源的过度消耗。

  10. 离线访问:缓存可以支持离线访问,使应用程序在没有连接到主要数据源时仍能够提供基本功能。

缓存穿透是一种缓存相关的性能问题,指的是恶意请求,通过访问缓存中不存在的数据,大量频繁地请求数据库连接,消耗资源。缓存穿透的明显特征:恶意大量大规模地请求不存在的数据

解决方案1:针对不存在的数据,使用null存入缓存。

  • 优点:方案方便简单

  • 缺点:会消耗大量的内存,有可能引起数据不一致的问题(缓存null的同时插入了真实值,数据就不一致了)

解决方案2:使用布隆过滤器拦截

  • 优点:内存占用少,没有多余key

  • 缺点:设计方案稍微复杂,存在误判

02布隆过滤器

布隆过滤器是一种用于快速检测某个元素是否存在于集合中的数据结构。在缓存层之前使用布隆过滤器,可以快速拦截那些明显不存在于数据源中的请求。在系统启动或数据更新后,就可以预热缓存,将热门数据加载到缓存中。

布隆过滤器实质上是一种位图(bitmap):相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或者1。

  • 存储数据:通过多个hash函数获取hash值,根据hash计算数组对应位置改为1

  • 查询数据:使用相同hash函数获取hash值,判断对应位置是否都为1

误判:当查询并不存在的“武侯区”时,会返回错误的判断结果。

误判率:数组越小误判率越高,数组越大误判率越低,但越大的数组就带来了越多的内存消耗。(使用布隆过滤器的情况下默认允许误判率小于等于5%)

03缓存击穿场景与方案

缓存击穿是指:当一个缓存key设置了过期时间,而在过期的那一瞬间有大量并发请求同时访问这个key,导致请求穿透缓存直接访问数据库,而这个瞬间是有可能把数据库压垮的。

缓存没有命中查询数据库之后不是会写入缓存么?——缓存击穿的瞬间就是发生在这个写入的间隔时间内,哪怕只是10ms

解决方案1:互斥锁,在缓存中设置一个互斥锁,用于保护数据的加载过程,同时避免多个请求并发操作数据。

  • 优点:强一致性

  • 缺点:互斥锁导致资源消耗,性能差

解决方案2:逻辑过期,设置热门数据的缓存永不过期,或者设置一个很长的过期时间,以确保数据不会频繁失效。

  • 优点:高可用性,性能好

  • 缺点:不能保证保证数据绝对一直

04缓存雪崩场景与方案

缓存雪崩是指在某个时间点,缓存中的大量数据同时失效或过期,导致大量请求直接访问后端数据源,对后端系统造成巨大压力的情况。缓存雪崩通常发生在以下场景:

  1. 大规模数据同时过期:在某个时间点,大量缓存数据的过期时间到达,导致这些数据在短时间内同时失效。

  2. 系统重启:当系统重新启动或缓存服务重启时,所有缓存数据都会失效,导致大量请求访问后端数据源。

  3. 热门数据失效:缓存中的热门数据在某个时间点过期,因此大量请求同时访问这些数据。

解决方案1:针对过期时间->通过随机设置缓存数据的过期时间,避免大量数据同时过期。

解决方案2:针对Redis宕机->采用集群的方式部署Redis服务。

解决方案3:针对热门数据失效->在系统启动或低峰期,对热门数据进行预加载到缓存中,以降低高峰时段缓存失效的风险。

解决方案4:使用多级缓存方案,本地缓存+分布式缓存。

解决方案5:兜底策略->限流降级或者熔断,在高峰期对请求进行限流,确保不会过多请求直接访问后端。

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

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

相关文章

微信小程序获取剪切板的内容到输入框中

xml代码 <navigation-bar title"Weixin" back"{{false}}" color"black" background"#FFF"></navigation-bar> <view><input placeholder"请输入内容" name"content" type"text" …

ansible安装和常见模块

文章目录 ansible的安装1.1 yum install epel-release.noarch1.2配置epel源的baseurl1.3安装ansible1.4安装ansible报错问题1.5 yum卸载 ansible的安装 ansible是由epel源提供的&#xff0c;所以需要配置epel源。要么通过配置好的baseos源直接执行“yum install epel-release.…

常用设计模式——策略模式

策略模式是什么 策略模式&#xff08;Strategy&#xff09;&#xff1a;针对一组算法&#xff0c;将每一个算法封装起来&#xff0c;从而使得它们可以相互替换。 比如我们一个软件的会员等级&#xff0c;每一个等级都会有对应的一些等级权益&#xff0c;那么每一个等级权益就…

Docker 安装ELK7.7.1

(注&#xff1a;在安装之前&#xff0c;本方法必须安装jdk1.8以上版本) (注&#xff1a;如果在虚拟机下用可以直接按方法走即可&#xff0c;如果是想进行备份后在别的机器上进行相关操作&#xff0c;必须把所有带有172.17.0.6、192.168.8.166:9200和端口号都改成你自己的方可使…

windows下使用FCL(Flexible-collision-library)

windows下使用FCL&#xff08;The Flexible-collision-library&#xff09; FCL做为一款开源的碰撞检测库&#xff0c;支持多种基础的几何体&#xff0c;及支持C和python&#xff0c;在windows和linux平台均可以使用。是一款计算高效的碰撞检测工具。在机械臂规划控制框架movei…

LeetCode热题100——链表

链表 1. 相交链表2. 反转链表3. 回文链表4. 环形链表5. 合并两个有序链表 1. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 // 题解&#xff1a;使用A/B循环遍…

Windows桌面便签工具推荐使用哪一款?

电脑桌面上张贴便利贴可以将近期需要完成的工作计划逐一添加到便利贴中&#xff0c;电脑桌面悬挂便利贴工具可以督促日常各项事务的完成。当前可悬挂在电脑桌面上的便利贴工具是比较多的&#xff0c;其中桌面小工具便签软件敬业签可满足各行业的办公需求。 建议大家在Windows桌…

SHEIN要求卖家完成德国EPR合规,逾期将强制下架——站斧浏览器

EPR是卖家在欧盟自由销售的通行证之一&#xff0c;如果没有&#xff0c;是不允许在欧盟国家销售产品的。 近期根据SHEIN官方邮件通知&#xff0c;卖家需要在收到邮件后5天内完成申报&#xff0c;逾期申报产品将会在德国站点下架。 因此&#xff0c;建议卖家尽快通过合规的服务…

Spring Security OAuth 2.0 资源服务器— JWT

目录 一、JWT的最小依赖 二、JWT的最基本配置 1、指定授权服务器 2、初始预期&#xff08;Startup Expectations&#xff09; 3、运行时预期&#xff08;Runtime Expectations&#xff09; 三、JWT认证是如何工作的 四、直接指定授权服务器 JWK Set Uri 五、提供 audie…

MIPI-CSI-2 RAW10笔记

好文&#xff1a; 【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客 (56 封私信 / 24 条消息) 显示器的 VGA、HDMI、DVI 和 DisplayPort 接口有什么区别&#xff1f; - 知乎 (zhihu.com) 嵌入式工程师必备&#x…

0基础2小时搭建自己的网站

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;0基础2小时搭建个人网站 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;宁静是一片强大而治愈的神奇海洋&#xff01; 目录 前言 第一步 环境…

云尘靶场 Medium_Socnet 内网为docker 无站代理 不存在gcc的提权方式 解决ldd过高无法执行exp 指定so文件

首先我们可以通过 arp-scan 扫描当前内网中的存活 但是不知道为什么扫不出来 然后我们使用fscan可以获取存活 这里大致扫描只开了22端口 所以我们使用nmap进行信息收集扫描 nmap -sS -sV -A -p- 172.25.0.13通过tcp 进行 版本服务扫描 并且检测系统版本 全端口 这里我们可以…

技术分享 | 想做App测试就一定要了解的App结构

app 的结构包含了 APK 结构和 app 页面结构两个部分 APK结构 APK 是 Android Package 的缩写&#xff0c;其实就是 Android 的安装包。通过将 APK 文件直接传到 Android 模拟器或 Android 手机中执行即可安装。 APK 文件其实是 zip 格式&#xff0c;但后缀名被修改为 apk&am…

随身wifi编译Openwrt的ImmortalWrt分支

背景&#xff1a; 之前用酷安上下载的苏苏亮亮版友提供的Openwrt&#xff0c;在高通410棒子上刷机成功&#xff0c;但编译一直就没搞定。近期听说又出了个分支版本ImmortalWrt&#xff0c;刷了个版本&#xff0c;感觉界面清爽不少&#xff0c;内核也升级&#xff0c;遂打算搞定…

深度剖析.locked1勒索病毒的威胁:如何保护您的数据

导言&#xff1a; .locked1勒索病毒是当今数字时代中最神秘的网络威胁之一。这种恶意软件以其毫不留情的数据加密技术而著称&#xff0c;常通过欺诈邮件附件、恶意链接或漏洞利用等方式传播。本文91数据恢复将深入探讨.locked1勒索病毒的运作方式&#xff0c;提供数据恢复的方…

centos7安装nginx-阿里云服务器

1.背景 2.准备工作步骤 2.1.安装gcc 阿里云服务器一般默认是安装了的 检查是否已安装 gcc -v 出现如下信息表示已安装: 如果没有安装,执行 yum -y install gcc 2.2.安装pcre,pcre-devel yum install -y pcre pcre-devel 2.3.安装zlib yum install -y zlib zlib-devel…

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…

【Unity细节】生命函数Start的逻辑比从外部调用方法比起来哪个快

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

飞书开发学习笔记(二)-云文档简单开发练习

飞书开发学习笔记(二)-云文档简单开发练习 一.云文档飞书开发环境API 首先还是进入开放平台 飞书开放平台&#xff1a;https://open.feishu.cn/app?langzh-CN 云文档相关API都在“云文档”目录中&#xff0c;之下又有"云空间",“文档”&#xff0c;“电子表格”&a…

Antv/G2 自定义tooltip鼠标悬浮提示信息

Antv/G2 提示 - Tooltip 教程 Tooltip 提示信息文档 chart.line().position(label*value).color(type).tooltip(type*value, (type:string, value:number) > { return {name: type,value: value%}}) });demo&#xff1a; <!DOCTYPE html> <html lang&quo…