持久化方式
RDB
RDB方式是通过快照完成,以二进制的方式保存到磁盘。
当符合一定条件时Redis会自动将内存中的所有数据进行快照,并存储到硬盘上。
快照条件
条件由两个参数构成:时间和改动的键值个数。即在指定时间内被改动的键的个数大于执行数值时,就会进行快照。这是Redis的默认持久化方式。
设置
可以设置RDB文件的存储路径以及文件名。
使用场景
Redis在启动后会读取快照文件,将数据从磁盘载入到内存中。
具体操作
- 当快照条件满足时
- redis会调用系统函数fork(),创建一个子进程
- 子进程会将数据集写入到一个临时文件
- 临时文件写完后,会替换原旧rdb文件
快照方式
自动快照(开启子进程执行),主动快照(可发送命令SAVE或BGSAVE,让Redis主动进行快照。会占用当前主进程,阻塞其他请求)
优点
- 非常适合备份和灾难恢复
- 在恢复数据时速度快于AOF
缺点
- 假如5分钟才触发条件,进行数据存盘。如果在未触发提交时,机器发生故障,数据就会丢失。
- 当数据量过大时,进行快照,可能会耗时
原文
https://www.cnblogs.com/xiaolovewei/p/9038220.html
AOF
将所有对数据库进行操作的命令记录到AOF文件
保存模式
- Always:服务器每写入一个命令,就将缓存区中的命令写入磁盘
- Everysec:缓存区中的命令,服务器每秒写入磁盘(默认)
- No:服务器不主动写入
优点
数据基本不会丢失
缺点
- aof文件会越来越大
- 通过aof文件恢复数据会很慢(每个命令都会被执行)
混合型持久
redis4后的版本支持
结合RDB和AOF的优点,快速加载数据并避免丢失过多数据。
混合持久化默认是关闭的。
具体执行过程:fork出的子进程,先将内存数据全量写入aof文件,再将缓存区的命令以增量的形式追加到aof文件。执行完成后,替换旧的aof文件。