【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存雪崩) Redis两种持久化方案详情对比(RDB、AOF)

news2024/11/15 10:43:55

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存雪崩) & Redis两种持久化方案详情对比(RDB、AOF)

  • 1)Redis 面试题
    • 1.1.高频面试题:缓存穿透、缓存击穿、缓存雪崩
    • 1.2.低频面试题:有关 redis 集群的面试题
  • 2)Redis 的持久化
    • 2.1.RDB 的持久化方案
      • 2.1.1.介绍
      • 2.1.2.RDB方案优点
      • 2.1.3.RDB方案缺点
      • 2.1.4.RDB配置
    • 2.2.AOF的持久化方案
      • 1.1.1.介绍
      • 1.1.2.开启AOF
      • 1.1.3.配置AOF
      • 1.1.4.AOF rewrite
      • 1.1.5.AOF优点
      • 1.1.6.AOF的缺点
    • 2.3.RDB or AOF

1)Redis 面试题

1.1.高频面试题:缓存穿透、缓存击穿、缓存雪崩

在这里插入图片描述

1.2.低频面试题:有关 redis 集群的面试题

从 Redis 3.0 发布提供 Redis Cluster 以后,经历 Redis 4.x、Redis5.x 和 Redis 6.x 一系列版本,Redis Cluster 更加成熟、稳定,推荐企业使用此种架构,通常公司也是使用此种架构。如果使用 Redis Cluster 集群,面试中碰到的问题有一些坑,还望注意。

  • 问题一:Redis 的多数据库机制,了解多少?

    在这里插入图片描述

  • 问题二:懂 Redis 的批量操作么?

    在这里插入图片描述

  • 问题三:Redis 集群机制中,你觉得有什么不足的地方吗?

    在这里插入图片描述

  • 问题四:在 Redis 集群模式下,如何进行批量操作?

    在这里插入图片描述

  • 问题五:懂 Redis 事务么?

    在这里插入图片描述

2)Redis 的持久化

2.1.RDB 的持久化方案

2.1.1.介绍

Redis 会定期保存数据快照至一个 rbd 文件中,并在启动时自动加载 rdb 文件,恢复之前保存的数据。可以在配置文件中配置 Redis 进行快照保存的时机:

save [seconds] [changes]

意为在seconds秒内如果发生了changes次数据修改,则进行一次RDB快照保存,例如

save 60 100

会让 Redis 每60秒检查一次数据变更情况,如果发生了100次或以上的数据变更,则进行 RDB 快照保存。可以配置多条 save 指令,让 Redis 执行多级的快照保存策略。Redis 默认开启 RDB 快照。也可以通过 SAVE 或者 BGSAVE 命令手动触发 RDB 快照保存。SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同:

  • SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。

  • BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。 Redis 服务器在 BGSAVE 执行期间仍然可以继续处理客户端的请求。

2.1.2.RDB方案优点

1、对性能影响最小。如前文所述,Redis在保存RDB快照时会fork出子进程进行,几乎不影响Redis处理客户端请求的效率。

2、每次快照会生成一个完整的数据快照文件,所以可以辅以其他手段保存多个时间点的快照(例如把每天0点的快照备份至其他存储媒介中),作为非常可靠的灾难恢复手段。

3、使用RDB文件进行数据恢复比使用AOF要快很多。

2.1.3.RDB方案缺点

1、快照是定期生成的,所以在 Redis crash 时或多或少会丢失一部分数据。

2、如果数据集非常大且 CPU 不够强(比如单核 CPU),Redis 在 fork 子进程时可能会消耗相对较长的时间,影响 Redis 对外提供服务的能力。

2.1.4.RDB配置

(1)修改redis的配置文件

cd /export/server/redis-3.2.8/conf
vim redis.conf
# 第202行
save 900 1
save 300 10
save 60 10000
save 5 1

这三个选项是redis的配置文件默认自带的存储机制。表示每隔多少秒,有多少个key发生变化就生成一份 dump.rdb 文件,作为 redis 的快照文件。

例如

save 60 10000 表示在60秒内,有10000个key发生变化,就会生成一份redis的快照。

(2)重新启动redis服务

每次生成新的 dump.rdb 都会覆盖掉之前的老的快照

ps -ef | grep redis
bin/redis-cli -h node1.itcast.cn shutdown
bin/redis-server redis.conf

2.2.AOF的持久化方案

1.1.1.介绍

采用 AOF 持久方式时,Redis 会把每一个写请求都记录在一个日志文件里。在 Redis 重启时,会把 AOF 文件中记录的所有写操作顺序执行一遍,确保数据恢复到最新。

1.1.2.开启AOF

AOF 默认是关闭的,如要开启,进行如下配置:

# 第594行
appendonly yes

1.1.3.配置AOF

AOF提供了三种fsync配置:

always/everysec/no(通过配置项[appendfsync]指定)

  • appendfsync no不进行fsync,将flush文件的时机交给OS决定,速度最快

  • appendfsync always每写入一条日志就进行一次fsync操作,数据安全性最高,但速度最慢

  • appendfsync everysec折中的做法,交由后台线程每秒fsync一次

1.1.4.AOF rewrite

随着 AOF 不断地记录写操作日志,因为所有的写操作都会记录,所以必定会出现一些无用的日志。大量无用的日志会让 AOF 文件过大,也会让数据恢复的时间过长。不过 Redis 提供了 AOF rewrite 功能,可以重写 AOF 文件,只保留能够把数据恢复到最新状态的最小写操作集。

AOF rewrite可以通过BGREWRITEAOF命令触发,也可以配置Redis定期自动进行:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • Redis在每次AOF rewrite时,会记录完成rewrite后的AOF日志大小,当AOF日志大小在该基础上增长了100%后,自动进行AOF rewrite

  • auto-aof-rewrite-min-size最开始的AOF文件必须要触发这个文件才触发,后面的每次重写就不会根据这个变量了。该变量仅初始化启动Redis有效

1.1.5.AOF优点

1、最安全,在启用 appendfsync 为 always 时,任何已写入的数据都不会丢失,使用在启用 appendfsync everysec 也至多只会丢失1秒的数据。

2、AOF 文件在发生断电等问题时也不会损坏,即使出现了某条日志只写入了一半的情况,也可以使用 redis-check-aof 工具轻松修复。

3、AOF 文件易读,可修改,在进行某些错误的数据清除操作后,只要 AOF 文件没有 rewrite,就可以把 AOF 文件备份出来,把错误的命令删除,然后恢复数据。

1.1.6.AOF的缺点

1、AOF 文件通常比 RDB 文件更大。

2、性能消耗比 RDB 高。

3、数据恢复速度比 RDB 慢。

Redis的数据持久化工作本身就会带来延迟,需要根据数据的安全级别和性能要求制定合理的持久化策略:

  • AOF + fsync always 的设置虽然能够绝对确保数据安全,但每个操作都会触发一次 fsync,会对 Redis 的性能有比较明显的影响

  • AOF + fsync every second 是比较好的折中方案,每秒 fsync 一次

  • AOF + fsync never 会提供 AOF 持久化方案下的最优性能

使用RDB持久化通常会提供比使用AOF更高的性能,但需要注意RDB的策略配置。

2.3.RDB or AOF

每一次 RDB 快照和 AOF Rewrite 都需要 Redis 主进程进行 fork 操作。fork 操作本身可能会产生较高的耗时,与 CPU 和 Redis 占用的内存大小有关。根据具体的情况合理配置 RDB 快照和 AOF Rewrite 时机,避免过于频繁的 fork 带来的延迟。

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

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

相关文章

校友小程序定制开发 带我们回到那个学生时代

学生时代总是给人一种单纯美好的感觉,也会是每个人记忆深处最深刻的回忆,尤其是一起学习生活几年的同窗随着毕业不得不各奔东西,但是大家都对母校有着不一样的情怀,也想有一个什么东西能够把各个高校校友联系在一起。校友小程序开…

瑞芯微 Rockchip rknn 模型在线预编译

瑞芯微 Rockchip rknn 模型在线预编译 flyfish 主机Host环境 Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy开发板Target环境 RV1126一 主机连接开发板 用线连起来后,查看usb信息 没权限的提示 no permissions (…

微信小程序笔记(1)

小程序笔记 小程序一个页面为什么有四个文件? [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVdz4I1W-1681982063887)(C:\Users\26387\AppData\Roaming\Typora\typora-user-images\image-20230419170019877.png)] wxss:写页…

对学历贬值的再观察

最近在求职市场上观察到这样一个现象,有些4年前硕士学历就能进入的职业,现在都要博士了,不免让人有一种4年书白读的感觉。所以想再观察一下学历贬值,平复一下心情(不是)。 学历贬值的原因:供大于…

day1 Flappy bird项目介绍

项目介绍 功能分析: 1、按下空格小鸟上升,不按下落; 2、搭建小鸟需要穿过的管道; 3、管道自动左移和创建; 4、小鸟触碰到管道游戏结束; 知识储备: 1、C语言; 2、数据结构 -…

【Vue2源码】响应式原理

【Vue2源码】响应式原理 文章目录 【Vue2源码】响应式原理Vue响应式的核心设计思路整体流程响应式中的关键角色检测变化注意事项响应式原理数据观测重写数组7个变异方法增加__ob__属性__ob__有两大用处: Vue.js 基本上遵循 MVVM(Model–View–ViewModel&…

[oeasy]python0135_变量名与下划线_dunder_声明与赋值

变量定义 回忆上次内容 变量 就是 能变的量上次研究了 变量标识符的 规则 第一个字符 应该是 字母或下划线合法的标识符可以包括 大小写字母数字下划线 还研究了字符串(str)的函数 isidentifier查询字符串 是否为合法标识符 最后发现 这个isidentifier函数有时候不好使&…

实战iOS App 重签名

熟悉iOS开发的同学都知道,iOS应用的上架流程主要分为以下几步: 创建开发者账号借助辅助工具appuploader创建证书,描述文件iTunes connect创建App打包IPA上传App Store等待审核在签名的流程中,有一个App重签名的步骤,主要针对的是一些大公司有多个App的情况,多个App一个申…

Linux设备驱动开发 - S3C2440时钟分析

By: fulinux E-mail: fulinuxsina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 系统框架图FLCK,HCLK,PCLK时钟源的选择 时钟体系流程流程分析驱动中的clk 系统框架图 2440是一个SOC(system on …

【网络编程】网络编程 和 Socket 套接字认识

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 目 录 🎧一. 网络编程基础🎺1. 为什么需要网络编程?🎷2. 什么是网络编程🎸3. 网络编程中的基础概念 🎿二. So…

继续学习Easyx

画圆角矩形函数:roundrect,前四个参数是和矩形一样的,表示先画一个矩形,然后就是要画它的圆角了,要怎么画它的圆角?这里使用四个一样的椭圆来将它的四个角画出来,而在这个里面的椭圆不再需要四个…

MySQL8.0.33主从复制配置记录

目录 1. 下载2. 解压3.重命名4.创建存储数据文件5. 设置用户组并赋权6. 初始化MySQL7.配置文件8. 启动MySQL9. 设置软连接,并重启MySQL10. 登录并更改密码11. 开放远程连接12. 连接工具测试连接MySQL13. 开机自启配置14.从服务器配置15. 主库配置16. 从库配置17. 测…

功率MOS管烧毁,有这些原因

功率MOS管烧毁的原因以及相应的预防措施。在本文中,我将会介绍功率MOS管的基本结构、工作原理,以及可能导致功率MOS管烧毁的原因,并提供相应的解决方案。 1. 功率MOS管的基本结构和工作原理 功率MOS管是一种常用的功率电子器件,…

SpringBoot集成MyBatis-plus

SpringBoot集成MyBatis-plus 一、Mybatis-Plus简介1.简介2.特性3.官网及文档地址 二、入门案例1.开发环境2.创建数据库及表3.创建Springboot项目导入依赖4.配置application.yml5.启动类6.实体类7.添加mapper8.添加UserController9.日志配置 三、CURD1.BaseMapper2.通用Service …

事件主循环

一、事件主循环 1、事件处理主流程 libevent的事件循环主要是通过event_base_loop函数来完成,其主要的操作如下: 1、根据timer-heap中的事件最小超时时间,计算系统I/O demultiplexer的最大等待时间。例如:当底层使用的是Linux提供…

Android系统启动流程--system_server进程的启动流程

紧接上一篇zygote进程的启动流程,上一篇的结尾提到zygote进程中会fock出一个system_server进程,用于启动和管理Android系统中大部分的系统服务,本篇就来分析system_server进程是如何创建并运行的以及它都做了哪些重要的工作。 //文件路径&am…

Show, Attend, and Tell | a PyTorch Tutorial to Image Captioning代码调试(跑通)

Show, Attend, and Tell | a PyTorch Tutorial to Image Captioning代码调试(跑通) 文章目录 Show, Attend, and Tell | a PyTorch Tutorial to Image Captioning代码调试(跑通)前言1. 创建、安装所用的包1.1 创建环境&#xff0c…

【深度学习】OCR文本识别

OCR文字识别定义 OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程;即,对文本资料进行扫描…

【数据结构】二叉树经典oj题

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…

B. Make Them Equal(Codeforces Round 673 (Div. 1))

传送门 题意: 思路: 首先判断是否能够操作达到目的:即所有的数都相等。 不能达到有两种情况: 1:所有数之和对n取余不等于0 2: 每个ai都是小于i的,例如n5, a[]{0,1,2,3,4}。因为每个数都是小于 i 的&am…