redis缓存预热、缓存穿透的详细教程

news2024/9/22 13:46:08

前言

    作此篇主要在于关于redis的缓存预热、缓存雪崩、缓存击穿和缓存穿透在面试中经常遇到,工作中也是经常遇到。中级程序员基本上不可避免要克服的几个问题,希望一次性解释清楚

缓存预热

MySQL加入新增100条记录,一般默认以MySQL为准为底单数据,如何同步给redis(布隆过滤器)
这是100合法数据,mysql有100条新纪录,但是redis无。
    为什么需要预热
    1)比较懒,什么都不做,之对mysql做了数据新增,利用回写机制,让他逐渐实现100条新增的记录同步
最好提前晚上部署发布版本的时候,由自己人提前做一次,让redis同步了,不要把这个问题留给客户。
    2)通过中间件或者程序自行完成。

缓存穿透

    请求查询一条记录,先查看redis无,后查mysql无,都查不到该条记录,但是请求每次都会打到数据库上面去,导致后台压力暴增,这种现象成为雪崩。
    简单的说就是缓存和数据都差不多数据。而且也会存在反复穿透的恶意攻击给系统带来的伤害。严重是可以直接打爆数据库的。

解决方案1

空对象缓存或者省缺值
    如果发生了缓存穿透,我们可以针对要查找的数据,在redis里存一个和业务部门商量后确定的省缺值(比如0,负数、defaultNull等)
    举个例子:如比一个键值,uid:asddf,值defauNull为案例的key和value,先去redis查键uid:asddfxxx没有,再去查MySQL没有获取数据,这次一次穿透。但是在这我们增强回写机制,mysql也查不到的话也让redis存入查不到的key并保护mysql。
但是次方法架不住黑客恶意攻击,也有缺陷。只能解决key相同 的情况。具体表现为黑客会对你的系统进行攻击,拿一个不存在的id去查询数据,会产生大量的请求到数据库查询。可能会导致你的数据库由于压力过大而宕机。
其中攻击类型有如下两种:

1.相同的key攻击

    第一次打到MySQL,空对象缓存后对第二次就返回defaultNull缺省值,避免mysql被攻击,不用再用到数据库中去查询数据,浪费数据库资源。

2.不同的key攻击

    由于存在空对象缓存和缓存回写redis中的无关紧要的key也会越写越多,如果不设置过期时间的情况下,会极大的浪费内存空间。

解决方案2

    Google布隆过滤器Guava解决缓存击穿问题。
什么是布隆过滤器,如下如所示,它的数据结构有点像数据结构中的哈希,不过传统的哈希数据结构,一个对象只能占用数组的一个坑位。而布隆过滤器一个对象可以占用多个数组的坑位。具体如下图所示,一个字符串对象可以有多个哈希值,每一个哈希值都对应一个数组坑位。
在这里插入图片描述
    布隆过滤器用来做什么?很显然,解决缓存穿透问题(废话)。将所有合法的key将入到布隆过滤器中,设置一个白名单,在所有访问之前需要经过布隆过滤器,如果key值经过布隆过滤器校验不存在,则判定为非法key,避免了访问数据库。具体的工作流程如下流程图所示。
在这里插入图片描述

结语

    点赞、收藏。多谢多谢。

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

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

相关文章

5-2 检测内存容量

1 使用的是bios 中断, 每次进行检测都会返回一块 内容。并且标志上,这块内存是否可用。 接下来是代码: 首先是构建 一个文件夹, 两个文件。 types.h 的内容。 #ifndef TYPES_H #define TYPES_H// 基本整数类型,下面的…

C++系统教程002-数据类型(01)

一、数据类型 学习一门编程语言,首先要掌握它的数据类型。不同的数据类型占用的内存空间不同,定义数据类型合理在一定程度上可以优化程序的运行。本次主要介绍C中常见的数据类型及数据的输入与输出格式。本章知识架构及重难点如下: &#xf…

linux监听网速

方法一 tcpdump -i ens33 -w - | pv -bert > /dev/null方法二

问题 J: 数据结构基础33-查找二叉树

题目描述 已知一棵二叉树用邻接表结构存储&#xff0c;中序查找二叉树中值为x的结点&#xff0c;并指出是第几个结点。例&#xff1a;如图二叉树的数据文件的数据格式如下 输入 第一行n为二叉树的结点个树&#xff0c;n<100&#xff1b;第二行x表示要查找的结点的值&…

windows环境安装OceanBase数据库并创建表、插入数据

windows环境安装OceanBase数据库并创建表、插入数据 前言&#xff1a;OceanBase数据库目前不支持直接在Windows环境下安装&#xff0c;安装比较麻烦&#xff0c;记录一下安装过程 1.安装方案 根据官方文档&#xff1a;https://www.oceanbase.com/docs/common-oceanbase-databa…

实验六 异常处理

实验目的及要求 目的&#xff1a;了解异常的概念&#xff0c;掌握异常处理的方法&#xff0c;掌握throws与throw关键字的区别与联系&#xff0c;掌握自定义异常的方法及用途。 要求&#xff1a; &#xff08;1&#xff09;编写程序了解程序中可能出现的运行时异常与非运行时…

摆花 NOIP2012普及组

目录 思路 代码 思路 代码 #include <iostream> #include <algorithm>using namespace std; using LL long long;const int N 1e2 9; const int mod 1e6 7;int n,m; LL a[N]; LL f[N][N];void solve() {cin >> n >> m;f[0][0] 1;for (int i 1;…

Jmeter模拟用户登录时获取token如何跨线程使用?

一、用户定义的变量 1、添加"用户定义的变量" 2、填写"host、port" 二、setUp线程组 1、添加"setUp线程组" 2、设置循环次数"100" 三、CSV 数据文件设置 1、添加"CSV 数据文件设置" 2、填写信息"用户登录数据.csv、…

2024 天池云原生编程挑战赛决赛名单公布,9 月 20 日开启终极答辩

历时 4 个月&#xff0c;2024 天池云原生编程挑战赛决赛名单公布&#xff01; 本届大赛规模创新高&#xff0c;参赛战队达 20000 支&#xff0c; 广覆盖国内外优秀高校和杰出企业&#xff01;吸引了来自北京大学、清华大学等 176 所国内外优秀高校&#xff0c;以及美团、米哈游…

vue3+ts项目import导入路径用@/报错找不到模块“@/components/也没有快捷提示

解决办法 在tsconfig.json文件中加入以下代码 "compilerOptions": {"baseUrl": ".","paths": {"/*": ["./src/*"] }}, 喏 ☟

【开端】服务器间免密登录配置

1.首先进入源 服务器中&#xff0c;进入/root/.ssh路径下 2.将路径下的”id_rsa.pub”文件复制到目标服务器的/root/.ssh路径下 3.打开目标服务器/root/.ssh路径中的“authorized_keys”文件&#xff0c;如没有则创建&#xff0c;并将”id_rsa.pub”文件中的内容复制到“auth…

ctfshow-爆破(web21-web28)

web21 提交用户和密码后发现没有用户以及密码的值呢 常见的是在post数据中 或者url后传值 但这里都没有 发现http头有一个Authorization字段 值是base64编码后的 解码 原来是将传入的值用冒号分离进行base64编码然后放到了Authorization字段中了 设置变量 增加前缀 增加编码方…

Spring6梳理6——依赖注入之Setter注入

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 一、引言 二、Java方法初始化过程 2.1 set方法及构造器方法实现Book对象初始化 三…

深入浅出SRS—RTMP实现

RTMP 直播是 SRS 最典型的使用场景&#xff0c;客户端使用 RTMP 协议向 SRS 推流&#xff0c;使用 RTMP 协议从 SRS 拉流&#xff0c;SRS 作为一个 RTMP 直播服务器实现媒体的转发。同时&#xff0c;RTMP 是 SRS 的中转协议&#xff0c;其他协议之间的互通需要先转为 RTMP&…

机器学习:数据清洗流程及完整代码实现

概述&#xff1a; 在处理数据之前&#xff0c;需要进行数据质量分析&#xff0c;了解数据的功能和作用&#xff0c;检查原始数据中是否存在脏数据。脏数据一般是指不符合要求以及不能直接进行相应分析的数据。 脏数据往往存在如下问题&#xff1a;没有列头&#xff0c;一个列有…

【CanMV K230】线段检测

【CanMV K230】线段检测 什么是线段检测线段检测应用领域1.地图解析中的道路、建筑轮廓提取2.计算机视觉中的物体识别和跟踪。3.机器人导航和环境理解。4.图像分割和特征点提取。5.建筑测量和图像重建。6.OCR&#xff08;光学字符识别&#xff09;预处理。7.行人检测和交通标志…

html+css+js网页设计 宝石及材料与工艺学专业知识科普与学习11个页面 带报告

htmlcssjs网页设计 宝石及材料与工艺学专业知识科普与学习11个页面 带报告 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&a…

免费分享:2014-2018年全球5.0级及以上地震正式报目录数据集

数据详情 本数据集为2014年—2018年中国台网正式目录&#xff08;统一编目目录&#xff09;全球5.0及以上地震6459次地震数据&#xff0c;属性字段包含发震时刻、经度、纬度、深度、地震类型、震级、参考位置、事件类型等。 数据属性 数据名称&#xff1a;全球5.0级及以上地震…

【数学建模】2024数学建模国赛B题(word论文+matlab):生产过程中的决策问题

详情请见&#xff1a;https://mbd.pub/o/bread/mbd-ZpqblZ5u 文章目录 一、问题二、解答2.1 问题一2.2 问题二2.3 问题三2.4 问题四 一、问题 某企业生产某种畅销的电子产品&#xff0c;需要分别购买两种零配件&#xff08;零配件1和零配件2&#xff09;&#xff0c;在企业将两…

gcn(从空间域理解)

一、背景 常见的神经网络&#xff0c;如BP神经网络可以用来处理表格型的数据&#xff0c;卷积神经网络可以用来处理图片数据&#xff0c;循环神经网络则可以用来处理序列数据&#xff0c;这些数据都是结构化的数据&#xff0c;当我们需要处理的数据为图这种非结构化的数据&…