redis持久化
rdb是默认的持久化方式
rdb快照数据不全
rdb的触发:手动save,bgsave
自动:conf配置 save seconds times save seconds times 几秒之内几次写操作会触发,任何一个满足都会出发
save,shutdown,slave命令都会触发
fork子进程内存分配策略?0,1,2三种方式
aof 追加命令
aof持久化的时机,3种策略:
appendfsync always (每次操作都写入aof文件,丢失最少,down机可能丢失一个事件循环内的数据,效率低,慢)
always是在一个while循环进行的,每一轮循环将step1 前一轮的aof_buf数据刷盘,step2.新的数据写入aof_buf。所以可能会丢失一个循环的数据。
appendfsync everysec (每秒钟同步一次,默认策略,数据安全和效率介于另外两者之间)
appendfsync no (redis不主动同步,由操作系统同步刷盘到aof文件,丢失数据不可预估,效率最高)
aof因为是命令追加的方式,aof文件会比rdb大很多,有时会迅速变大,怎么解决?
aof文件重写
选型?
aof和rdb各有优缺点,看更看重数据一致性还是性能、启动效率,
在两个都开启的情况下,启动后加载aof的数据,会比较慢
可以手动处理,二者都开启,先用rdb回复大部分数据,再用aof追加补上新的数据
4.0版本以后aof文件由rdb二进制数据和命令共同组成,前一部分是rewirte的结果。这样可以在压缩文件的同时尽可能保证数据的完整性。
redis: 优先使用aof日志,没有的话使用rdb
rdb:快照,二进行文件,文件名.RDB
rdb文件创建方式:手动(save、bgsave)、自动(/etc/redis.conf配置,使用bgsave)。
mysql:redolog