RDB
- RDB持久化的功能指把当前Redis在内存中的状态保存到磁盘上,RDB文件是一个压缩过的二进制文件
- SAVE和BGSAVE命令可以生成RDB文件,SAVE会阻塞Redis服务器进程来生成文件,BGSAVE则会派生出一个子进程来生成RDB文件,这俩个命令不能同时执行
- Redis服务器在启动时会自动载入RDB文件来更新内存中数据库状态,但是如果服务器开启了AOF持久化功能,会优先使用AOF来更新,因为AOF更新频率比RDB更快,数据库更新
- Redis服务器根据save选项设置的保存条件来自动执行BGSAVE命令
save 300 10
save 60 10000
表示服务器在300秒之内对数据库进行了10次修改或者60秒内对数据库进行了10000次修改就进行BGSAVE
AOF
- AOF通过记录Redis服务器执行的写命令来记录数据库状态,AOF文件中除了执行数据库的SELECT是自动添加的,其他命令都是客户端发送的
- AOF持久化可分为:命令追加、文件写入、文件同步
-- 当一个写命令被服务器执行结束时,会以协议格式把写命令追加到aof_buf缓冲区
-- Redis服务器进程是一个事件循环,服务器每结束一个事件循环都会调用
文件写入和文件同步区别:
AOF文件载入和还原数据库
由于Redis命令只能在客户端执行,所以服务器会起一个无网络连接的伪客户端来执行AOF文件中的命令
AOF重写
- 由于AOF文件是记录数据库的写命令,时间久了,AOF文件会很大,需要重写(AOF 重写由 Redis 自行触发,BGREWRITEAOF 仅仅用于手动触发重写操作)来减少文件体积;。
- 为了在重写过程中,Redis服务器进程还可以响应请求,通过使用子进程来进行AOF重写:子进程保留了服务器进程的数据副本,使用子进程而不是子线程,可以保证在不使用锁的前提下保证数据的安全性
-- 为了防止在重写时丢失命令,Redis服务器设置了一个AOF重写缓冲区,在重写开始时,把之后到重写完成时服务器接受的写指令同时发给AOF缓冲区和AOF重写缓冲区,子进程完成重写后,把重写缓冲区数据追加到新AOF文件中,在原子替换原有的AOF文件,就完成了AOF文件重写了。
BGSAVE、SAVE、BGREWRITEAOF之间不能同时执行
网友评论