Redis缓存穿透,缓存击穿,缓存雪崩

文章目录

  • Redis缓存穿透,缓存击穿,缓存雪崩
  • 1. 缓存穿透
    • 1.1 解决方案1:缓存空数据
    • 1.2 解决方案2:使用布隆过滤器
      • 1.2.1 布隆过滤器介绍
  • 2. 缓存击穿
    • 2.1 解决方案1:互斥锁
    • 2.2 解决方案2:逻辑过期
  • 3. 缓存雪崩
    • 3.1 解决方案

Redis缓存穿透,缓存击穿,缓存雪崩

在这里插入图片描述

1. 缓存穿透

查询一个不存在的数据,mysql中查询不到也不会写入缓存,导致每次请求都要查mysql

例:get请求 api/products/getById/1001
在这里插入图片描述

1.1 解决方案1:缓存空数据

查询返回的数据为空,仍把这个数据进行缓存{key:1, value: null}

优点:实现简单
缺点:消耗内存可能会发生不一致情况

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

在这里插入图片描述
优点:内存占用少
缺点:实现负责,存在误判

1.2.1 布隆过滤器介绍

bitmap(位图):是一个以(bit)为单位的数组,数组中每个单元只能存储二进制数0或1
作用:检索一个元素是否存在一个集合中
实现:
1) 存储数据:id为1的数据,通过多个hash函数获取hash值,根据hash计算数组对应位置改为1
2) 查询数据:使用相同hash函数获取hash值,判断对应位置是否都为1
使用Guava或者Redisson实现布隆过滤器
误判率:数组越小,误判率越大,数组越大误判率越小,但是同时带来更多的内存消耗。

2. 缓存击穿

给某个key设置了过期时间,当key过期时候,对这个key有大量的并发请求进来,瞬间把mysql压垮

在这里插入图片描述

2.1 解决方案1:互斥锁

互斥锁,数据强一致,性能差

2.2 解决方案2:逻辑过期

高可用,性能优,不能保证数据绝对一致。
实现:{“id”:“1”,“title”:“xx项目”,“expire”:156414365},请求时候先检查逻辑过期时间,如果过期,就加互斥锁,生成新的线程来处理写缓存逻辑过期时间重置问题,当前线程返回过期数据;如果加互斥锁失败,就直接返回过期数据。

3. 缓存雪崩

同一时间大量的缓存key同时过期或者Redis服务宕机,导致大量的请求到达mysql,给mysql带来巨大压力

在这里插入图片描述

3.1 解决方案

  • 利用Redis集群提高服务的可用性 哨兵模式、分片集群模式
  • 给业务添加多级缓存 Guava或Caffeine
  • 给缓存业务添加降级限流策略 nginx或SpringCloud Gateway
  • 给不同的key的TTL添加随机值

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

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

相关文章

NumPy 中级教程——随机数生成

Python NumPy 中级教程:随机数生成 在数据科学、机器学习和统计学等领域中,随机数生成是一个关键的操作。NumPy 提供了丰富的随机数生成功能,包括生成服从不同分布的随机数、设置随机种子等。在本篇博客中,我们将深入介绍 NumPy …

【漏洞复现】OpenSSH ProxyCommand命令注入漏洞(CVE-2023-51385)

文章目录 前言一、漏洞背景二、漏洞详情三、影响范围四、漏洞验证 前言 OpenSSH存在命令注入漏洞(CVE-2023-51385),攻击者可利用该漏洞注入恶意Shell字符导致命令注入。 一、漏洞背景 OpenSSH 是 SSH (Secure SHell&#xff09…

Oracle笔记-查看表已使用空间最大空间

目前以Oracle18c为例,主要是查这个表USER_SEGMENTS。 在 Oracle 18c 数据库中,USER_SEGMENTS 是一个系统表,用于存储当前用户(当前会话)拥有的所有段的信息。段是 Oracle 中分配存储空间的逻辑单位,用于存…

HTTP协议编程实战(二)实战二

使用析构函数主要是在里面关闭套接字(socket); waitForReadyRead()里面参数是毫秒,失败返回false; \r\n表示请求头部已经结束了,HTTP/1.1是版本号,200 ok表示请求响应成功 关闭的话就在前面加/

javaScript中的常用事件

文章目录 javaScript中什么是事件?基本原理javaScript中的时间使用1,窗口事件1.1、onblur1.2、onfocus1.3、onload1.4、onresize 2,表单事件2.1、onchange2.2、**oninput**2.3、oninvalid2.4、onselect2.5、onsubmit 3,键盘事件3.…

国科大图像处理2023速通期末——汇总2017-2019

国科大2023.12.28图像处理0854期末重点 图像处理 王伟强 作业 课件 资料 一、填空 一个阴极射线管它的输入与输出满足 s r 2 sr^{2} sr2,这将使得显示系统产生比希望的效果更暗的图像,此时伽马校正通常在信号进入显示器前被进行预处理,令p…

记录爬虫编写步骤

本文讲解 Python 爬虫实战案例:抓取百度贴吧(https://tieba.baidu.com/)页面,比如 Python爬虫吧、编程吧,只抓取贴吧的前 5 个页面即可。今天一个毕业学生问到一个问题:不清楚编写爬虫的步骤,不…

TF-IDF(Term Frequency-Inverse Document Frequency)算法 简介

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索和文本挖掘的常用算法。它用于评估一个词对于一个文档集合中某个文档的重要性。 这个算法的基本思想是:如果一个词在一个文档中频繁出现,并且在整个文档集合…

计算机网络第一课

先了解层级: 传输的信息称为协议数据单元(PDU),PDU在每个层次的称呼都不同,见下图:

我的CSDN 512天创作者纪念日总结:高效、高现

文章目录 512天创作者纪念日:2023年的12月31日CSDN的512天消息提醒第一篇文章,最后一篇文章总计847篇文章,每月发文分布512天,各专栏文章统计512天,互动总成绩 512天创作者纪念日:2023年的12月31日 2023年…

我最喜欢的趣味几何书-读书笔记

我最喜欢的趣味几何书-读书笔记 1、利用阴影的长度来测量 公元前6世纪,古希腊哲学家泰勒思为了测量金字塔,想到了这样的方法:选择了一个特殊的时间,在那个时间,他自身的影子长度刚好跟他的身高相等。此时&#xff0c…

LeetCode 2706. 购买两块巧克力【数组,一次遍历】1207

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

【并发设计模式】聊聊Thread-Per-Message与Worker-Thread模式

在并发编程中,核心就是同步、互斥、分工。 同步是多个线程之间按照一定的顺序进行执行,比如A执行完,B在执行。而互斥是多个线程之间对于共享资源的互斥。两个侧重点不一样,同步关注的是执行顺序,互斥关注的是资源的排…

腾讯云轻量应用服务器详细介绍_2024年更新

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且价格特别便宜,大带宽,但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年,540元三年、2核4G5M带宽218元一年,756元3年、…

pyqt5用qtdesign设计页面时,去掉页面的空白界面、边框和标题栏

前言 Windows默认的标题栏有时候自己觉得不太美观,就想自己设计一个,然后把默认的去掉,并且把长方形的边框和多余的空表界面去掉,就是下图中圈出来的区域: 去掉之后的效果如图: 这样我们就可以自定义窗…

bash 变量作用域

在shell 编程中,对 bash 变量作用域的理解是非常重要的,特别是在某些函数会被多次调用的情况,如果在函数中定义的是全局变量,就会导致下一次调用的时候,出现错误的逻辑的时候不容易发现。 bash的变量分成三种&#xff…

【排序算法】【二叉树】【滑动窗口】LeetCode220: 存在重复元素 III

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDi…

盾构机数据可视化监控平台 | 图扑数字孪生

2002 年,中国 863 计划把盾构机列为国家关键技术&#xff0c;以国家力量为主导&#xff0c;集中力量进行盾构机专项研究。在 2008 年&#xff0c;中国成功研制出属于自己的国产盾构机——中国中铁一号&#xff0c;同时还打通了天津地铁 1500m 的隧道。此举更彻底地打破了国内盾…

setFirstResult ,setMaxResults

setFirstResult 是起始数据&#xff0c;setMaxResults是查询显示的数据。 如果放在分页程序里边 &#xff0c; setFirstResult的值应该是 (当前页面-1)X每页条数&#xff0c;表示从第几条记录开始&#xff0c; setMaxResults 就是每页的条数了&#xff0c;是查询的条数&…

LeetCode2469. Convert the Temperature

文章目录 一、题目二、题解 一、题目 You are given a non-negative floating point number rounded to two decimal places celsius, that denotes the temperature in Celsius. You should convert Celsius into Kelvin and Fahrenheit and return it as an array ans [ke…