前言:
redis持久化是为了在redis服务重启的时候在内存中恢复数据,默认是从aof中恢复数据,redis的持久化策略,第一RDB,第二种AOF.,下文会对两种解析方式进行分析
RDB:
定时快照方式持久化,该策略是通过将当前经常中的内存数据进行以快照的方式存储,因为redis是单线程的,所以会通过fork函数生成一个子进程,进行快照存储,该存储一开始是一个临时文件,写入成功后会将其名字改为rdb为后缀的文件,该操作是原子性操作。但是通过rdb持久化会丢失数据,例如在上一次快照之后,下一次快照之前,redis出现非正常退出,那么这段时间的内存数据就会丢失。
触发条件:手动触发,自动触发
手动触发命令:
save: 直接将redis实例中的数据快照以rdb文件保存到磁盘,此时会阻塞主进程,影响处理客户端请求,基本被废弃不用
bgsave: 此时redis会通过fork函数生成子进程,处理快照任务,服务器继续处理客户端的请求。推荐使用此方法
注意:fork函数生成子进程的时候也会阻塞主进程,但只是临时的,一旦生成完毕,主进程就可以处理客户端请求,而save是在整个save期间都会阻塞主进程。
自动触发:下文的配置,在redis.cof中配置
AOF
语句追加到一个文件的持久化方式,其实就是对内存数据的写操作指令记录在文件中,通过该操作会发现文本文件不断增大,所以有提供bgrewriteaof操作,类似快照的方式。默认每秒写入一次,也可以选择每次操作一次写入一次。
总结,在恢复数据的方式上,rdb数据更快一些,两种方式都可以同时使用,但是需要注意,当开启rdb持久化的时候,当系统正常重启时,会自动执行一次save操作,但是恢复数据缺使用的时aof中的数据。如果两者的数据出现偏差,那么会产生比较严重的问题,这个需要格外注意。
常用配置
RDB持久化配置
Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
AOF持久化配置
在Redis的配置文件中存在三种同步方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化
要想不丢失数据,最好的方式是做好数据备份
网友评论