(一)Redis 4.0 混合持久化
重启Redis时,我们很少使用RDB来恢复内存状态,因为会丢失大量数据。我们通常使用AOF日志重放。
但是重放AOF日志性能相对RDB来说要慢很多,这样在Redis实例很大的情况下,启动需要花费很长的时间。
Redis4.0 为了解决这个问题,带来了一个新的持久化选项 --- 混合持久化。
通过如下配置可以开启混合持久化(必须先开启AOF)
# aof‐use‐rdb‐preamble yes
如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理
并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件
才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
于是在Redis重启的时候,可以先加载RDB的内容,然后再重放增量AOF日志就可以完全替代之前的AOF全量文件重放,因此重启效率大幅得到提升
Redis 数据备份策略
1 写crontab 定时调度脚本,每小时copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份
2 每天都保留一份当日的数据备份到一个目录中去,可以保留最近一个月的备份
3 每次copy备份的时候,都把太旧的备份给删了
4 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏
(二) Redis 主从架构
(三)Redis 主从工作原理
如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。
master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接受客户端的请求,
他会把这些可能修改的数据集的请求缓存在内存中,当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后在加载到内存中。
然后,master再将之前缓存在内存中的命令发送给slave.
当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,他只会进行一次持久化,而不是一个连接一次,然后再把这一份
持久化的数据发送给多个并发连接的slave
主从复制流程图:
人生岔路口
如何进行选择