redis持久化,当redis宕机了,保存在内存中的数据就没了,这时候有两种备份数据到硬盘的方式:
1.快照的方式(RDB)---每次都去抓拍一下全面貌 ,当前内存中存储的数据
每次都全量备份--
2.文件追加方式(AOF)--在之前的基础上追加,操作的命令
如果rdb和aof都开启了,则默认首先加载aof文件,为了保证数据的尽可能完整性。
rdb:备份慢,启动快
aof:备份快,启动慢
一.快照的方式(RDB)
Redis 默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改,就会将内存中的数据保存到硬盘
手动备份策略:
1.save: 阻塞线程--- 因为执行这个指令的线程就是redis里面唯一的那个执行指令的线程-
当你备份大量的数据的时候,如果耗时比较长,则当有其他客户端发送指令的时候,会卡主
2.bgsave: 单独的线程,后台专门有一个线程去实现备份。
这个后台的就是专门来根据我们的配置文件里策略然后去备份数据文件
底层原理: 有一个定时器,就是不停的计算我们阈值。每一次bgsave之后,要把计数器清0===
优势:备份缓慢,但是重启加载数据性能比较快,父进程启动一个子进程,由子进程将内存保存在硬盘文件, 期间不会影响其他的指令操作
二.文件追加方式(AOF)
aof 重写问题:当数据文件到达一个阈值的时候,,我们的文件会继续重写变成一个小文件
默认是没有开启的,想要用AOF模式,需要修改config 中的配置 appendonly yes
重启服务后,再到客户端查询会变成yes
类型 | 安全性 | 性能 |
no | 低 | 高 |
everysec | 比较高 | 比较高 |
always | 高 | 低 |
AOF三个步骤
命令追加——>文件写入——>文件同步
Redis服务每次结束一个事件循环之前,都会调用flushAppendOnly函数,其中调用write函数将aof_buf写入文件
redis..4X 版本之后,混合模式---
混合模式【备份,启动快】
备份的时候,我通过aof备份,我还原的时候根据rdb...
aof--文件重写的问题---到数据大的时候,
当我们进行aof操作的时候,把aof文件变成rdb,然后之后的操作直接取做日志追加。。
默认的情况下,你要你开启了aof则,混合默认自动打开。
混合模式的文件--包含aof和rdb;
总结:
如果要redis的性能非常高,就不要持久化
如果要保证数据的完整性,要根据自己的业务来选择不同的持久化策略,一般情况都是使用混合模式
第一次配置的时候,切记吧aof打开(默认开启混合模式)