面试官问Redis的两种持久化有什么区别如何选择合适的持久化方式

2021-07-26 11:50 PHP面试题
PHP面试题
PHP面试题
带你全面剖析PHP面试考点及考官考察思路,带你系统梳理面试知识,总结面试重难点,理解解题技巧和方法,提升后端开发技能。
14篇原创内容
公众号

面试中面试官问你啥问题,小编都给你整理在这里了。每天都会整理一份最接地气的面试题,希望能帮助到你!图片图片


同时带上一套视频教程【带你横扫PHP职场 全面解读PHP面试】,感谢你对本公众号的关注图片关注本公众号,回复:160705   即可获取。更多学习课程请查看:IT自学资源分享平台


学习与交流:PHP技术交流群

商务合作加微信:2230304070






1 什么是Redis持久化?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

2 Redis 的持久化机制是什么?各自的优缺点?

Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:

RDB:是Redis DataBase缩写快照

RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。


触发机制-主要三种方式

save(同步)
bgsave(异步)
自动

save命令:客户端向Redis发送save命令来创建一个快照文件。

图片


执行save命令的时候,如果存在老的快照文件,新的将会替换老的。
bgsave命令:客户端向Redis发送bgsave命令,Redis调用fork创建一个子进程,然后子进程负责将快照写入硬盘,而父进程则继续处理命令请求。


图片


save命令和bgsave命令对比:

图片


自动生成:通过配置,满足任何一个条件就会创建快照文件。

图片


快照持久化选项: 

多久执行一次自动快照操作,60s之内有1000次操作写入时执行
save 60 1000
创建快照失败后是否仍然继续执行写命令
stop-writes-on-bgsave-error no
是否对快照文件进行压缩
rdbcompression yes
命名硬盘上的快照文件
dbfilename dump.rdb


最佳配置: 

dbfilename dump-${port}.rdb
dir /bigdiskpath
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes


AOF:持久化

AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。

图片

优点:

1、数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 aof 文件中一次。

2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题,

3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))

缺点:

1、AOF 文件比 RDB 文件大,且恢复速度慢。
2、数据集大的时候,比 rdb 启动效率低。

优缺点是什么?
  1. AOF文件比RDB更新频率高,优先使用AOF还原数据。

  2. AOF比RDB更安全也更大

  3. RDB性能比AOF好

  4. 如果两个都配了优先加载AOF


AOF三种策略

always:每条Redis写命令都同步写入硬盘。

 图片

everysec:每秒执行一次同步,将多个命令写入硬盘。 

图片

no:由操作系统决定何时同步。

图片 


三种策略对比:生产环境中需要根据实际的需求进行选择。

图片


AOF重写

随着Redis的运行,被执行的写命令不断同步到AOF文件中,AOF文件的体积越来越大,极端情况将会占满所有的硬盘空间。如果AOF文件体积过大,还原的过程也会相当耗时。为了解决AOF文件不断膨胀的问题,需要移除AOF文件中的冗余命令来重写AOF。

图片


AOF重写的两种实现方式:
bgrewriteaof命令和bgsave命令的工作原理相似:Redis创建一个子进程,然后由子进程负责对AOF文件进行重写。

图片


AOF重写配置

配置参数说明:

图片

具体配置: 

appendonly yes
appendfilename "appendonly-${port}.aof"
appendfsync everysc
dir /bigdiskpath
no-appendfsync-on-rwrite yes
auto-aof-rewrit-percentage 100
auto-aof-rewrite-min-size 64mb
本文章转载自公众号:gh_76d3a9268845

首页 - PHP 相关的更多文章: