AOF RDB进阶
AOF/RDB
RDB是快照文件(被压缩的二进制文件)
AOF保存的是redis指令
如:set msg “hello”
RDB保存的是key value
AOF 保存的是整个指令
RDB:
redis服务器在启动的时候会检测RDB文件,如果RDB文件存在就会自动导入RDB文件。
AOF进行持久化的时候更新频率更高,数据更全,所以如果AOF持久化开启,会优先使用AOF来还原数据。
SAVE 命令和BGSAVE指令用于生产RDB文件。
SAVE会堵塞redis服务器,BGSAVE通过派生一个子进程来实现。
reids在配置文件中的save选项 设置了三个保存的条件。
save 900 1 表示900,秒内对数据库进行了至少一次修改
save 300 10 表示300,秒内对数据库进行了至少10次修改
save 60 10000 表示60,秒内对数据库进行了至少10000次修改
满足这三个条件中的任意一个就会触发BGSAVE命令
配置文件截图
AOF:保存写命令
AOF还原数据库,是通过创建一个不带连接的伪客户端:因为Redis命令只能在客户端上下文中执行,而载入AOF的文件时所使用的命令也是来自于AOF文件,而不是网络连接,所以服务器伪造了一个没有连接的伪客户端来执行写命令。
redis的写命令会同步到aof_buf中,然后会调用函数(flushAppendOnlyFile函数)把缓存中的数据写入到aof文件中。
AOF还通过重写这样的方式来避免数据的冗余。比如对同一个set类型的key 进行了多次的sadd 操作,就会被优化成一条 sadd 后面接好几条数据。