Redis持久化机制
Redis的数据全部在内存中,如果突然宕机,内存中数据就会丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。
Redis有2种持久化机制:RDB(快照)机制 和 AOF(日志)机制
1、RDB机制(快照)
RDB机制保存的是数据,将内存中的数据写入磁盘永久保存,这是redis默认的机制。
原理:
redis进程会创建一个子进程
redis主进程继续处理客户端请求
子进程负责将子进程创建前的内存数据(快照数据)写入磁盘中名为dump.rdb文件
持久化时机:
redis.conf配置文件中配置的有持久化时机
在900秒(15分钟)之后,有大于等于1个key发生变化,则保存快照。
save 900 1
在300秒(5分钟)之后,有大于等于10个key发生变化,则保存快照。
save 300 10
在60秒(1分钟)之后,有大于等于10000个key发生变化,则保存快照。
save 60 10000
RDB的特点:
优势
方便备份,很容易将一个rdb文件移动到其他机器上
rdb在恢复大数据集时比aof速度更快
rdb快照保存时,不影响主进程的工作
劣势
rdb每次要保存内存中所有数据,一般耗时比较久,一旦宕机可能会丢失数据
rdb机制下如果内存中数据量非常大,创建子进程会非常耗时
2、AOF机制(日志)
AOF(Append Only File)机制保存的是redis执行过的命令。
原理:
将redis执行过的每一个写命令都追加到日志文件(appendonly.aof)中。
当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
开启AOF机制
在配置文件中将appendonly no 改为 appendonly yes
AOF机制开启后,RDB机制和AOF机制会同时运行
AOF持久化时机
配置文件中的配置
AOF的特点
优势
AOF可以更好的保护数据不丢失
AOF日志文件以append-only模式写入,写入性能比较高
AOF日志可读性好,即使误删了所有的数据,只需要将日志中的删除命令去除,然后就可以根据日志恢复数据
劣势
相同的数据集下,AOF文件通常大于RDB文件
如果持久化时机策略选择不合理,性能会非常差
AOF在特殊情况下会出现一些bug
实战策略
综合使用AOF和RDB两种持久化机制,用AOF来保证数据不丢失,作为数据恢复的第一选择; 用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,还可以使用RDB来进行快速的数据恢复。
3、AOF下的日志瘦身
Redis 在长期运行的过程中,AOF 的日志会越变越长。如果实例宕机重启,重放整个 AOF 日志会非常耗时,导致长时间 Redis 无法对外提供服务。所以需要对 AOF 日志瘦身。
原理
redis主进程创建一个子进程对内存进行遍历转换成一系列 Redis 的操作指令。将操作指令写到一个新的 AOF 日志文件中。
操作指令输出完毕后再将操作期间发生的增量操作追加到 AOF 日志中
追加完毕后就立即替代旧的 AOF 日志文件了,瘦身工作就完成了。
重做时机
自动重做
配置文件中进行配置
手动重做
领取专属 10元无门槛券
私享最新 技术干货