Redis 中两种持久化机制详解,大厂面试必问

fork:当一个进程创建子进程的时候,底层的操作系统会创建该进程的一个副本,在类unix系统中创建子进程的操作会进行优化:在刚开始的时候,父子进程共享相同内存,直到父进程或子进程对内存进行了写之后,对被写入的内存的共享才会结束服务。

在这里插入图片描述

[](

)2. 客户端方式之 SAVE(单线程执行)


客户端还可以使用 SAVE 命令来创建一个快照,接收到 SAVE 命令的 Redis服务器在快照创建完毕之前将不再响应任何其他的命令;

注意:SAVE 命令并不常用,使用 SAVE 命令在快照创建完毕之前,Redis处于阻塞状态,无法对外服务。

在这里插入图片描述

[](

)3. 服务器配置方式之 配置快照触发条件


如果用户在 redis.conf 中设置了 save 配置选项,Redis 会在 save 选项条件满足之后自动触发一次 BGSAVE 命令;如果设置多个 save 配置选项,当任意一个 save 配置选项条件满足,Redis 也会触发一次 BGSAVE 命令。

在这里插入图片描述

save 900 1 表示 900s 内,执行了 1次 数据库操作则自动创建快照,以此类推。

[](

)4. 服务器接收客户端 SHUTDOWN 指令


当 Redis 通过 SHUTDOWN 指令接收到关闭服务器的请求时,会执行一个 SAVE 命令,阻塞所有的客户端,不再执行客户端执行发送的任何命令,并且在 SAVE 命令执行完毕之后关闭服务器。

[](

)配置文件中配置生成快照名称和位置


配置文件中可以修改生成快照名称以及快照保存位置:


# 生成快照名字, 默认为 dump.rdb

dbfilename dump.rdb



# 快照保存位置, 默认保存在 redis-cli 同级目录

dir ./ 

在这里插入图片描述

[](

)只追加日志文件 AOF (Append Only File)

=================================================================================================

在 Redis 的默认配置中 AOF持久化机制是没有开启的,需要在配置中开启;


# 开启 AOF持久化

appendonly yes



# 生成的日志文件名称

appendfilename "appendonly.aof"



# aof日志文件路径与快照保存位置设置的是同一个

dir ./ 

在这里插入图片描述

AOF 有 3 种 日志追加频率:

  • always 【谨慎使用】

  • everysec 【推荐】

  • no【不推荐】

[](

)1.always【谨慎使用】


  • 说明:每个 redis写命令 都要同步写入硬盘,严重降低 redis 速度;

  • 解释:如果用户使用了 always 选项,那么每个 redis 写命令都会被写入硬盘,从而将发生系统崩溃时出现的数据丢失减到最少;遗憾的是,因为这种同步策略需要对硬盘进行大量的写入操作,所以 redis 处理命令的速度会受到硬盘性能的限制;

  • 注意:转盘式硬盘(机械硬盘)在这种频率下200左右个命令/s;固态硬盘(SSD) 几百万个命令/s;

  • 警告:使用SSD用户请谨慎使用 always 选项,这种模式不断写入少量数据的做法有可能会引发严重的 写入放大 问题,导致将固态硬盘的寿命从原来的几年降低为几个月。

[](

)2.everysec【推荐】


  • 说明:每秒 执行一次同步显式的将多个写命令同步到磁盘;

  • 解释:为了兼顾数据安全和写入性能,可以使用 everysec 选项,让 redis 每秒一次的频率对AOF文件进行同步;redis 每秒同步一次AOF文件时性能和不使用任何持久化特性时的性能相差无几,而通过每秒同步一次AOF文件,redis可以保证,即使系统崩溃,用户最多丢失一秒之内产生的数据。

[](

)3.no【不推荐】


  • 说明:由操作系统决定何时同步;

  • 解释:使用 no 选项,将完全有操作系统决定什么时候同步AOF日志文件,这个选项不会对 redis 性能带来影响,但是系统崩溃时,会丢失不定数量的数据,另外如果用户硬盘处理写入操作不够快的话,当缓冲区被等待写入硬盘数据填满时,redis 会处于阻塞状态,并导致 redis 的处理命令请求的速度变慢。

[](

)配置文件中修改同步频率



# appendfsync always

appendfsync everysec 

# appendfsync no 

在这里插入图片描述

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

)]

全都是一丢一丢的收集整理纯手打出来的

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

[外链图片转存中…(img-5oroE8wr-1631179435688)]

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值