
Redis持久化策略
发布日期:2021-05-06 19:58:42
浏览次数:28
分类:精选文章
本文共 2126 字,大约阅读时间需要 7 分钟。
Redis持久化策略
RDB
RDB(Redis Database Backup file) 持久化策略采用的是快照模式,备份的是数据本身,redis默认的持久化策略。原理如图所示:
- 在redis.conf配置文件中,设置了SAVE选项,如:
save 900 1
,表示每900s至少有一个key被修改时,redis客户端会自动发送BGSAVE命令。 - 客户端发送BGSAVE指令,父进程fork出子进程,子进程完成RDB文件的生成。
- 内存不足时,客户端发送SAVE指令,直接在父(主)进程完成RDB文件的生成。(注意,执行SAVEe命令期间,Redis不能处理其他命令,直到RDB过程完成为止)
- Redis接收到关闭shutdown关闭服务器的请求时或者flushall,会触发客户端发送SAVE指令。
- 如果是redis集群,当一个redis服务器连向另外一个redis服务器发送
SYNC
命令时,如果主服务器目前没有在执行BGSAVE操作,或刚刚执行完,那么主服务器就会执行BGSAVE
如何通过RDB文件进行恢复数据?
- 只需要将RDB文件存放到redis的启动目录,即我们的redis.conf配置文件中的dir选项。redis启动时,会去扫描这个文件并恢复数据。
AOF
AOF(append only file) 持久化策略采用的是追加模式,备份的是操作数据的指令(读操作忽略,只有对数据有修改的命令才有意义)。原理和RDB类似,通过fork一个子进程,在子进程中完成持久化。默认配置中,redis是没有开启的。
# Please check http://redis.io/topics/persistence for more information.# aof是否开启, 需要手动设置为yesappendonly no# The name of the append only file (default: "appendonly.aof")# aof 文件名appendfilename "appendonly.aof"# appendfsync用于设置持久化策略# everysec 每一秒钟# always 每一次appendfsync everysec# rewrite 重写规则的设置no-appendfsync-on-rewrite no# percentage 增长比例 当这一次的aof文件比上一次的aof文件大1倍时,# rewrite 触发重写(与其操作一个大文件,不如重写来的快)auto-aof-rewrite-percentage 100# rewrite 当前aof文件大于多少字节后才触发重写,只对第一次的aof文件生# size 成有用,后边是根据比例(auto-aof-rewrite-percentage)来的auto-aof-rewrite-min-size 64mb# truncated 指redis在恢复时,会忽略最后一条可能存在问题的指令, 即在aof写入时,突然断电,指令写了一半,这种情况下,yes会继续,而no会直接恢复失败.aof-load-truncated
注意
no-appendfsync-on-rewrite
设置为yes时,在写aof文件时会阻塞主进程设置数据的操作。如果接下来aof重写成功,那么后边的主进程设置数据的操作正常执行,如果aof重写发生异常,后边主进程设置数据的操作将无法执行,从而发生数据丢失。
反之,设置为no,虽然不会阻塞主进程设置数据的操作,但在写aof文件期间,新写入的数据则不能被持久化。这是,如果再下一个写aof文件操作促发之前,发生意外,新写入的数据也有丢失的风险。
另外,aof文件是否正常可以通过redis提供的redis-check-aof
程序进行检查并修复。
优缺点
RDB&优点
- 存储的文件是紧凑的(需要借助特定工具,如rdbtools才能看得懂文本内容),备份速度比AOF要快
- 方便恢复不同版本的数据,适合于容灾恢复,备份文件可以在其他服务器恢复
RDB&缺点
- 如果Redis因为没有正确关闭而停止工作是,则再下一个RDB操作到来之前,新增的数据可能丢失。
- 由于通过fork子线程来进行备份操作,如果数据量很大的话,fork比较耗时,如果cpu性能不够,服务器可能是卡顿。
AOF&优点
- AOF是一个日志追加文件,即使因为没有正确关闭而停止工作造成aof文件末尾是一个写到一半的命令,也可以借助
redis-check-aof
进行恢复。 - AOF包含一个又一个的操作命令,易于理解和解析。
- 很多人都说AOF备份的数据完整性比RDB要强,这点不太苟同,这取决于备份时间周期的设置,越短完整性越强,不过则会牺牲其他方面的性能勒。
AOF&缺点
- AOF采用文件追加的方式,使得文件越来越大,如果没有设置好对应的重写策略,容易造成内存溢出。
- AOF可能比RDB要慢(跟
no-appendfsync-on-rewrite
有关)。 - AOF采用文件追加的方式更新数据,而RDB是从头开始创建,更健壮和稳定。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月03日 01时41分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
一个系统部署多个tomcat实例
2021-05-08
HP服务器设置iLO
2021-05-08
使用QT实现一个简单的登陆对话框(纯代码实现C++)
2021-05-08
QT :warning LNK4042: 对象被多次指定;已忽略多余的指定
2021-05-08
GLFW 源码 下载-编译-使用/GLAD配置
2021-05-08
Typescript 学习笔记六:接口
2021-05-08
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2021-05-08
MySQL-时区导致的时间前后端不一致
2021-05-08
2021-04-05阅读小笔记:局部性原理
2021-05-08
go语言简单介绍,增强了解
2021-05-08
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2021-05-08
sctf_2019_easy_heap
2021-05-09
bcolz的新操作
2021-05-09
delete对象时会自动调用类的析构函数
2021-05-09
POD类型
2021-05-09
Head First设计模式——迭代器模式
2021-05-09
记一次讲故事机器人的开发-我有故事,让机器人来读
2021-05-09
netcore中使用session
2021-05-09
Android 开发学习进程0.25 自定义控件
2021-05-09