redis的持久化

总括

redis提供了不同级别的持久化方式。

1.RDB(Redis DataBase) ——  默认生成dump.rdb文件

2.AOF(Append Only File)—— 默认生成appendonly.aof文件

1.RDB

1.1.什么是RDB

RDB的持久化方式能够在指定的时间间隔对数据进行快照存储。也就是将内存中的数据集快照写入磁盘。

它会单独创建(fork)一个子进程来进行持久化。会先将数据写入到一个临时文件中,待持久化过程结束后,替换原来的rdb文件。

主进程不进行任何的IO操作,这就确保了极高的性能。

1.2.如何触发RDB

1.2.1配置文件的方式

redis.conf文件部分
################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save  
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
当有以上操作时,就将数据同步到数据文件。

1.2.2命令save或者是bgsave

Save:save时只管保存,其它不管,全部阻塞
BGSAVE:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间。

1.2.3执行flushall命令

执行该命令也会产生dump.rdb文件,但里面是空的,无意义。

1.3.RDB的优缺点

1.3.1.优点

RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集。
RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心,非常适用于灾难恢复。
RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。
适合大规模的数据恢复,与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些

1.3.2.缺点

在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。


2.AOF

2.1什么是AOF

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

2.2开启与使用

AOF默认情况下是关闭的,我们需要到redis.conf中去开启。
将appendonly 修改为yes,默认文件名为“appendonly.aof”。开启后,之后的每一次写操作都会以日志的形式写入该文件。
############################## APPEND ONLY MODE ###############################

appendonly yes

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"
配置 Redis 多久才将数据 fsync 到磁盘一次。
有三种方式:
# appendfsync always
appendfsync everysec
# appendfsync no
always:同步持久化,每次发生数据变更会被立即记录到磁盘 ,性能较差但数据完整性比较好
everysec:出厂默认推荐,异步操作,每秒记录,如果一秒内宕机,有数据丢失
no:不进行持久化

2.3AOF重写 rewrite

2.3.1什么是rewrite

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,
当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,
只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof。

2.3.2触发机制

Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。
no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
no-appendfsync-on-rewrite:重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性。
auto-aof-rewrite-min-size:设置重写的基准值
auto-aof-rewrite-percentage:设置重写的基准值

2.4优势

1.使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据。
2.写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题。
3.AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂。

2.5缺点

1.相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
2.aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

你可能感兴趣的:(redis,数据库,数据库)