什么是持久化

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

持久化的方式

redis有有两种持久化方式:
一、默认的RDB(Redis DataBase)。 按照一定的时间将内存的数据以快照的形式存在磁盘中,产生的对应快照文件dump.rdb。通过配置文件中的save参数来定义快照的周期。
二、AOF(Append Only File)。将redis每次执行的命令存到单独的日志文件中,当重启redis时会从持久化的日志中恢复数据。

优缺点

RDB

优点
一、只有一个dump.rdb文件,方便持久化。
二、容灾性好,一个文件可以保存到安全的磁盘。
三、数据大时,恢复数据的速度比AOF快。
四、性能最大化,可以fork子进程来完成写的操作。让主进程继续处理命令,IO最大化,保证redis的性能。
缺点
一、数据安全性低,因RDB是间隔一段时间进行持久化,在持久化期间如果服务器宕机或者redis发生故障,会导致数据丢失。

AOF

优点
一、数据安全,AOF持久化可以配置appendfsync属性,有always,每进行一次命令操作就记录到aof文件中。
二、通过Append模式写文件,即使中途宕机,也可以通过redis-check-aof工具解决数据一致性问题。
缺点
一、AOF文件比RDB大,且恢复速度比RDB慢。
二、数据大时,启动效率比RDB低。

总体比较

一、重启时,优先加载AOF。
二、AOF比RDB更安全,也更大。
三、RDB性能比AOF快。

两种持久化方式的策略

RDB

save(同步)
客户端向redis发布save命令,创建一个快照文件。
image.png
bgsave(异步)
客户端向redis发布bgsave命令,redis会fork一个子进程负责把快照文件写入到磁盘,父进程继续处理命令请求。
image.png
save和bgsave对比
image.png

AOF

always
每条redis命令都写入磁盘命令
image.png
everysec
每秒执行一次同步,将多个命令写入磁盘中
image.png
no
由操作系统决定什么时候同步到磁盘中
image.png
always、everysec、no对比
image.png

出处:https://mp.weixin.qq.com/s/gM...


子非鱼
1 声望0 粉丝