Redis面经
Redis面经
- Redis缓存穿透、缓存击穿和缓存雪崩及解决方案
- 概述
- 缓存穿透详解及解决方案
- 缓存击穿详解及解决方案
- 缓存雪崩详解及解决方案
- Redis持久化机制
- 什么是数据持久化?
- Redis数据持久化概述
- RDB持久化的优缺点
- AOF持久化
- 混合持久化
Redis缓存穿透、缓存击穿和缓存雪崩及解决方案
概述
三者的根本原因在于,Redis命中率下降,请求直接打在了数据库上。
在正常的情况下,大部分的资源请求都可以被Redis响应,没有被Redis响应的小部分请求会转向数据库,这样的话,数据库DB的压力不会太大,是可以正常工作的。然而,如果大量高并发请求同时打在了Redis上,请求并没有在Redis上找到相应的资源,也就是Redis没有响应,命中率降低。这些请求就只能转向数据库,在大量高并发的请求之下,导致数据库压力瞬间增大,从而造成数据库服务器卡死或者宕机。而导致Redis命中率下降的原因就可以分为三种,分别对应着缓存穿透、缓存击穿和缓存雪崩。
缓存穿透详解及解决方案
缓存穿透是指请求根本不存在的资源,数据库中没有,Redis中更不会有。例如,客户端发送大量无法响应的请求,类似于“http://localhost:8080/user/199?id=-1”,数据库本身就不存在id=-1的用户数据,Redis中就更不可能存在,那么这些请求就得不到响应,就会直接打在数据库上。缓存穿透通常是黑客所为,黑客发送大量的无法响应的请求给服务器,由于请求的资源根本不存在,从而导致数据库压力过大而卡死或宕机。
解决方案:
- 对空值进行缓存:类似于上面的例子,由于数据库中没有id=-1的用户数据,可以在Redis中对它进行缓存,即key=-1,value=null。这样的话,当请求到达Redis的时候就会直接返回一个null给客户端,避免了Redis无法响应的问题。需要注意的是,对空值进行缓存时,key的过期时间不能设置太长,以免占用太多Redis资源,而且对空值进行缓存是一种很被动的防御方式,当遇到黑客请求大量不存在的资源就需要写入大量的null值到Redis中,可能会导致Redis内存不足。
- 实时监控,拒绝黑客攻击:当Redis命中率出现大大下降的情况,就要配合运维人员对访问对象和访问数据进行分析排查,从而进行黑名单的设置,拒绝黑客攻击。
- 使用布隆过滤器:使用BitMap作为布隆过滤器,将可以访问的资源通过简单的映射关系放到布隆过滤器中,例如哈希计算。当请求来临时,首先将请求放入布隆过滤器进行判断,如果有相应资源则放行,如果没有则直接拦截。需要注意的是,布隆过滤器是有一定误差的,一般需要配合其他限制来解决缓存穿透问题。
- 接口校验。类似于用户权限的拦截,对于id=-1这种无效请求直接进行拦截,不允许这些请求到达Redis和数据库上。
缓存击穿详解及解决方案
缓存击穿是指Redis中某个热点key过期,此时有大量的用户访问该key,大量高并发的对于该key的请求没有得到Redis的响应,就会转向数据库,导致数据库服务器瘫痪。
解决方案:
- 提前对热点数据进行设置:在一些新闻资讯平台或软件上,需要对热点数据提前设置在Redis缓存中。
- 监控数据,适时调整:监控哪些数据是热门数据,实时调整key的过期时长。
- 使用锁机制:只有一个请求可以获得互斥锁,请求在数据库中查询数据并将结果返回给Redis,这样其他请求就可以从Redis中得到响应。
缓存雪崩详解及解决方案
缓存雪崩像是缓存击穿的promax版,Redis中的key集体过期,相当于Redis中的大部分数据被清空了或者说是失效了,那么此时Redis中由于没有相应数据就无法响应大量高并发的请求,命中率急剧下降,请求都打在了数据库上,数据库服务器直接崩溃。
解决方案:
- 将失效时间分散开:使用自动生成随机数使得key的过期时间是随机的,防止集体过期。
- 使用多级缓存架构:使用Nginx缓存+Redis缓存+其他缓存,不同层使用不同的缓存,提高了系统的可靠性。
- 设置缓存标记:记录缓存数据是否过期,如果过期就会触发另外的后台线程实时更新过期的key。
- 使用锁或者队列的方式:请求不到的资源加上排它锁,其他请求就只能等待。
Redis持久化机制
什么是数据持久化?
数据持久化就是将数据从内存写入磁盘,目的在于防止数据丢失。内存中的数据在服务器重启或者断电时会丢失,而磁盘中的数据不会,为了确保系统的稳定性,需要进行数据的持久化操作。
Redis数据持久化概述
Redis是一种基于内存的数据库,同时,也支持将数据写入数据库,这个过程就叫做Redis数据持久化。
Redis持久化方法主要有以下三种:
- 快照方式(Redis database,RDB):将某一时刻的内存数据生成Snapshot快照,以二进制的形式写入磁盘,由于是以二进制的方式写入磁盘,因此效率很高,但是一旦Redis意外终止,就会导致部分数据丢失。
- 命令追加方式(Append only file,AOF):记录Redis数据的所有写操作指令,以文本的形式追加到AOF文件中,由于是以文本的形式写入,因此效率比较低,但是AOF文件记录了所有写操作指令,在Redis服务重启时,只需要从头到尾重新执行一遍AOF文件中的命令即可回复数据保证数据的完整性。
- 混合持久化方式:Redis4.0之后新增的方式,结合了RDB和AOF的优点,将RDB 文件和 AOF 日志文件存在一起,这里的 AOF 日志不再是全量的日志,而是自持久化开始到持久化结束的这段时间发生的增量 AOF 日志,通常这部分 AOF 日志很小。在写入的时候,先把当前数据以 RDB 形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能降低数据丢失的风险。因此,混合持久化适用于对数据安全性和性能要求较高的场景。
RDB持久化的优缺点
优点:
- RDB文件数据以二进制的形式存在,占用内存小,文件更加紧凑,适合于文件备份。
- RDB适合灾难恢复,由于其文件紧凑,可以更高效率地传输给远程服务器提供Redis服务。
- RDB可以提高Redis的运行速度,每次持久化Redis主线程会fork出一个子进程,子进程负责快照持久化,将内存数据存储到磁盘,而Redis主进程继续负责处理客户端请求,不会执行磁盘I/O等操作。
- 与AOF格式文件相比,RDB文件可以更快地重启,因为二进制方式写入磁盘的效率要比文本方式写入磁盘的效率要高。
缺点:
- 由于RDB只能保存某一时间段的数据,因此一旦中途Redis服务意外终止,则会丢失一段时间的Redis数据。
- RDB需要经常
fork()
才能使用子进程将内存数据持久化在磁盘中,一旦数据集过大,fork()
会很耗时,如果再加上CPU性能不佳,可能会导致Redis停止为客户端服务几毫秒甚至一秒钟。
AOF持久化
优点:
- AOF持久化保存的数据更加完整。因为AOF提供了三种保存策略:“每次操作保存、每秒钟保存一次和跟随系统持久化策略保存”,其中,每秒钟保存一次是AOF的默认保存策略,从数据安全性和性能方面来讲都是很不错的选择,即使发生意外,最多丢失一秒钟的数据。
- AOF采用命令追加的写入方式,不会出现文件损坏问题,即使有意外情况,也可以使用redis-check-aof工具轻松修复。
- AOF持久化文件很容易解析,因为它是把所有Redis键值操作命令以文本的形式写入磁盘,即使不小心使用
flush all
命令删除了所有的键值信息,只要使用AOF文件删除最后的flush all
命令,重启Redis服务即可恢复之前误删的数据。
缺点:
- 对于相同的数据集,AOP文件要大于RDB文件。
- 在Redis负载比较高的情况下,RDB要比AOF性能更好。
- RDB使用快照持久化数据,AOF使用命令追加到AOF文件,从数据完整性和可靠性的角度来看,RDB比AOF更加健壮、易于维护。
混合持久化
优点:
既能提高Redis服务启动的速度,还能保证数据的完整性和安全性,降低了丢失大量数据的风险。
缺点:
- AOF文件中添加了RDB格式的内容,使得AOF文件可读性变差。
- 混合持久化不能在Redis4.0之前的版本使用,兼容性差。
相关文章:
Redis面经
Redis面经 Redis缓存穿透、缓存击穿和缓存雪崩及解决方案概述缓存穿透详解及解决方案缓存击穿详解及解决方案缓存雪崩详解及解决方案 Redis持久化机制什么是数据持久化?Redis数据持久化概述RDB持久化的优缺点AOF持久化混合持久化 Redis缓存穿透、缓存击穿和缓存雪崩…...

【c++】类和对象(六)深入了解隐式类型转换
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来到初始化列表,隐式类型转换以及explicit的内容 目录 1.初始化列表1.1构造函数体赋值1.2初始化列表1.2.1隐式类型转换与复制初始化 1.3e…...

什么是nginx正向代理和反向代理?
什么是代理? 代理(Proxy), 简单理解就是自己做不了的事情或实现不了的功能,委托别人去做。 什么是正向代理? 在nginx中,正向代理指委托者是客户端,即被代理的对象是客户端 在这幅图中,由于左边内网中…...
【Go】面向萌新的Gin框架知识梳理学习笔记
目录 Gin框架简介 路由&路由组 1. 定义基本路由 2. 参数传递 3. 查询字符串参数 4. 路由组 5. 路由中间件 模板渲染 1. 加载模板 2. 定义模板 3. 渲染模板 4. 自定义模板函数 返回json 1. 导入 Gin 包 2. 创建 Gin 引擎 3. 定义路由和处理器函数 4. 运行服…...
baseDao增删改查.
这里写目录标题 1、baseDao增删改查介绍2、basDao类3、BasDao类的作用 1、baseDao增删改查介绍 (1)、增加Create)操作: 通过BaseDao的insert方法可以向数据库中插入一条新的记录。 该方法接受一个实体对象作参数,将该对象的属性映射到表的字…...
什么是面向对象【大白话Java面试题】
什么是面向对象 同样是解决一个问题,面向对象的角度是将问题抽象成对象的形式。通过分类的思维方式,将问题分成几个解决方案的对象。给每个对象赋值属性和方法,对每个对象的细节进行面向过程的思维,执行自己的方法来解决问题。 …...

PyTorch 教程-快速上手指南
文章目录 PyTorch Quickstart1.处理数据2.创建模型3.优化模型参数4.保存模型5.加载模型 PyTorch 基础入门1.Tensors1.1初始化张量1.2张量的属性1.3张量运算1.3.1张量的索引和切片1.3.2张量的连接1.3.3算术运算1.3.4单元素张量转变为Python数值 1.4Tensor与NumPy的桥接1.4.1Tens…...

【有芯职说】数字芯片BES工程师
一、 数字芯片BES工程师简介 今天来聊聊数字芯片BES工程师,其中BES是Back End Support的缩写,就是后端支持的意思。其实这个岗位是数字IC前端设计和数字IC后端设计之间的一座桥,完成从寄存器传输级设计到具体工艺的mapping和实现。这个岗位在…...

暴力破解pdf文档密码
首先安装pdfcrack工具包 apt install pdfcrack 默认密码字典存储在/usr/share/wordlists里,是gz文件,将它解压并copy到pdf目录 然后使用pdfcrack破解 密码在最后一行user-password的单引号里...

蓝桥杯刷题第四天
思路: 这道题很容易即可发现就是简单的暴力即可完成题目,我们只需满足所有数的和为偶数即可保证有满足条件的分法,同时也不需要存下每个输入的数据,只需要知道他是偶数还是奇数即可,因为我们只需要偶数个奇数搭配在一块…...

03-数据库的用户管理
一、创建新用户 mysql> create user xjzw10.0.0.% identified by 1; Query OK, 0 rows affected (0.01 sec) 二、查看当前数据库正在登录的用户 mysql> select user(); ---------------- | user() | ---------------- | rootlocalhost | ---------------- 1 row …...
每日一题 --- 三数之和[力扣][Go]
三数之和 题目:15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 **注意&#x…...
vue render 函数详解 (配参数详解)
vue render 函数详解 (配参数详解) 在 Vue 3 中,render 函数被用来代替 Vue 2 中的模板语法。 它接收一个 h 函数(或者是 createElement 函数的别名),并且返回一个虚拟 DOM。 render 函数的语法结构如下: render(h) …...

ubuntu23.10配置RUST开发环境
系统版本: gcc版本 下载rustup安装脚本: curl --proto =https --tlsv1.2 https://sh.rustup.rs -sSf | sh下载完成后会自动执行 选择默认安装选项 添加cargo安装目录到环境变量 vim ~/.bashrc<...

Vue性能优化--gZip
一、gZip简单介绍 1.1 什么是gzip gzip是GNUzip的缩写,最早用于UNIX系统的文件压缩。HTTP协议上的gzip编码是一种用来改进web应用程序性能的技术,web服务器和客户端(浏览器)必须共同支持gzip。目前主流的浏览器,Chro…...

蓝桥杯第七届大学B组详解
目录 1.煤球数量; 2.生日蜡烛; 3.凑算式 4.方格填数 5.四平方和 6.交换瓶子 7.最大比例 1.煤球数量 题目解析:可以根据题目的意思,找到规律。 1 *- 1个 2 *** 3个 3 ****** 6个 4 ********** 10个 不难发现 第…...

荣誉 | 人大金仓连续三年入选“金融信创优秀解决方案”
3月28日,由中国人民银行领导,中国金融电子化集团有限公司牵头组建的金融信创生态实验室发布“第三期金融信创优秀解决方案”,人大金仓新一代手机银行系统解决方案成功入选,这也是人大金仓金融行业解决方案连续第三年获得用户认可。…...

【关于jupyter notebook】一打开就闪退的问题
在Anaconda Prompt中输入jupyter notebook发现是有个错误。 里面多了一个__init__.py的文件导致报错。删除之后,就可以使用了...

若依 3.8.7版本springboot前后端分离 整合mabatis plus
1.去掉mybatis 这一步我没有操作,看别人的博客有说不去掉可能冲突,也可能不冲突,我试下来就没去掉如需要去除,到总的pom.xml中properties标签下的<mybatis-spring-boot.version>x.x.x</mybatis-spring-boot.version>…...
vue做移动端自适应插件实现rem
1.实现方式 postcss-pxtorem:将px转换为rem amfe-flexible:为html、body提那家font-size,窗口调整的时候重新设置font-size 2.安装与使用 npm install amfe-flexible --save npm install postcss-pxtorem --save-dev 1.再main.js入口文件…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...