登 录
注 册
< 数 据 库
MySQL
ClickHouse
ES
Doris
MongoDB
Redis
其他DB
Redis概述与安装
Redis持久化
Redis事务与主备
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
当前位置:
首页
>>
Redis
>>
Redis持久化
Redis持久化
2023-09-03 20:51:29 星期日 发表于北京 阅读:547
![](/static/images/article_images/1693749668.566953.jpeg) Redis持久化的两种方式 `RDB` `AOF` #### RDB 全称:Redis DataBase 功能:在指定的时间间隔内,将内存中的数据集快照(Snapshot快照)写入磁盘 详细配置:redis.conf文件 应用场景:需要对大规模数据进行恢复,且对于数据恢复的完整性不是非常敏感,RDB方式要比AOF方式更加高效 持久化格式:dump.rdb文件 默认的持久化策略: >1分钟内改了1万次 5分钟内改了10次 15分钟内改了1次 除了上面的自动持久化之外,还可以在Redis客户端使用save指令来强制持久化 save命令:同步备份,备份的时候Redis不接收其他请求 bgsave命令:异步备份,备份的时候Redis对外正常服务 #### AOF 全称:Append Only File 原理:以日志的形式来记录每个写操作,将Redis执行过的所有写命令记录下来(读操作不记录),只许追加文件,但不可以改写文件,Redis启动之初会读取该文加你重新构建数据。 文件格式:appendonly.aof 详细配置:redis.conf文件 AOF rewrite:因为AOF采用追加的方式,文件会越来越大,所以Redis增加了重写机制,当AOF文件大小超过预定的阈值时,Redis就会启动AOF文件的内容压缩。 劣势:相同数据集的备份文件aof文件要比rdb文件大,恢复速度慢于rdb; #### 如何选择AOF还是RDB? `官网建议` RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储 AOF持久化方式记录每次对服务器的写操作,当服务器重启的时候回重新执行这些命令来恢复原始的数据。AOF命令以Redis协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件进行后台重写,使得AOF文件的提及不至于过大。 `只做缓存` 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化的方式 `同时开启两种持久化` 在这种情况下,当Redis重启的时候回优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集完整 RDB的数据非实时,同时使用两者时服务器重启也只会找AOF文件,那要不要只使用AOF呢?作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能钱在你的bug,留着作为一个万一的手段 #### 性能建议 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留`slave 900 1`这条规则 如果Enable AOF,好处是在最恶劣的情况下也只会丢失不超过两秒数据,启动脚本较简单,只load自己的AOF文件就可以,但有如下代价: - 1、持续的IO - 2、AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。 只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF充血的基础大小默认值时64MB,太小了,可以设置到5GB以上,默认超过原大小100%大小时可以改到适当的数值 如果不开启Enable AOF,仅靠Mater-Slave Replication实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动,代价是如果Mater/Slave同时挂掉,会丢失十几分钟的数据,启动脚本也要比较两个Mater/Slave中的RDB文件,载入较新的那个,新浪微博就选用了这种架构