【redis】-持久化方式

为什么需要持久化?

redis之所以功能强大,是由于它将数据存储在内存中,读写数据速度很快。但是内存中的数据一关机就没了,为了使Redis在重启的时候仍能保证数据不丢失,才需要将数据从内存中以某种形式持久化到硬盘中。

怎么持久化?

Redis支持两种方式的持久化,一种RDB,一种AOF。可以单独使用一种,也可以两种结合使用。下面来分别说一下这两种方式具体是怎么工作的。

RDB

关键字:快照

快照是什么?简单的说就是某一时刻,对数据的复制品。
所以,RDB的工作原理就是,当符合一定条件时,Redis自动将内存中的所有数据进行快照并且存储到硬盘上。

一定条件:可以看redis.conf中的这几行
【redis】-持久化方式
也就是两个参数,时间和改动的键的个数。
配置文件中默认的是:15分钟(900秒) 1次 或 5分钟 10次 或 1分钟10000次 ,当满足这三个条件中一条的时候,会触发save,将内存中的数据快照到硬盘。

快照数据:默认是快照到dump.rdb,也可以在配置文件中改,建议默认。Redis启动会读取RDB的快照文件,将数据从硬盘载入内存。

快照过程:
1、Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
2、父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件
3、当子进程写入完成所有数据后会用该临时文件替换旧的RDB文件

AOF

关键字:记录操作
AOF持久化策略是将发送给Redis服务端的每一条命令都记录下来,并且保存到硬盘中的AOF文件,默认是appendonly.aof,和dump.rdb一样,也是可以在配置文件中进行修改的,不过建议默认。

问题:因为是记录操作,所以文件会越来越大,怎么办?

重写策略:当达到一定条件的时候,可以使用BGREWRITEAOF命令来重写AOF文件

一定条件:(配置文件默认如下,可修改)
auto-aof-rewrite-percentage 100
当前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据

auto-aof-rewrite-min-size 64MB
允许重写的最小AOF文件大小,通常在AOF文件很小的时候,即使其中有些冗余的命令也是可以忽略的。
【redis】-持久化方式

何时写入AOF?
文件写入,默认先写系统缓存,系统30秒同步一次,才真正写磁盘,在这30秒服务器宕机,数据还是会丢失,Redis可以通过配置来修改同步策略
appendfsync always 每次都同步(安全但慢)
appendfsync everysec 每秒同步,默认的同步策略
appendfsync no 不主动同步,由操作系统决定(最快但不安全)
【redis】-持久化方式