Redis的持久化
1、目标
Redis的高性能是由于其将素有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或者将二者结合使用。
2、RDB持久化机制
RDB持久化是指在指定时间间隔内将内存中的数据集快照写入磁盘,这种方式就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb,这种方式是默认已经开启了,不需要配置。
RDB持久化机制的配置:
redis.windows.conf
save 900 1
save 300 10
save 60 10000
其中,上面配置的是RDB方式持久化时机
关键字 | 时间(秒) | Key修改数量 | 解释 |
---|---|---|---|
save | 900 | 1 | 每900秒(15分钟)至少有1个key发生变化,则dump内存快照 |
save | 300 | 10 | 每300秒(5分钟)至少有10个key发生变化,则dump内存快照 |
save | 60 | 10000 | 每10000秒(1分钟)至少有10000个key发生变化,则dump内存快照 |
3、AOF持久化机制
AOF持久化机制会将每一个收到的写命令都通过write函数追加到文件中,默认的文件名是appendonly.aof。这种方式默认是没有开启的,要使用时候需要配置。
在redis.windows.conf配置文件中有如下配置:
appendonly no
将appendonly修改为yes,但是启动redis的时候需要指定该文件,也就是意味着不能直接点击了,需要输入命令启动:redis-server.exe redis.windows.conf
开启AOF持久化机制后,默认会在目录下产生一个appendonly.aof文件
下面配置为AOF持久化的时机,解释如下:(在redis.windows.conf配置)
关键字 | 持久化时机 | 解释 |
---|---|---|
appendfsync | always | 没执行一次更新命令,持久化一次 |
appendfsync | everysec | 每秒钟持久化一次 |
appendfsync | no | 不持久化 |
4、RDB持久化机制
优点:
(1)RDB是一个非常紧凑(compact)的文件,它保存了Redis在某个时间点上的数据集。这种文件非常适合用于进行备份。
(2)RDB在恢复大数据集时的速度比AOF的恢复速度要快(因为其文件比AOF的小)。
(3)RDB的性能要比AOF更好
缺点:
(1)RDB的持久化不够及时,可能会存储在数据丢失。
(2)RDB持久化时如果文件过大可能会造成服务器的阻塞,停止客户端请求。
5、AOF持久化机制
优点:
(1)AOF的持久性更加的耐久(可以每秒,或每次操作保存一次)。
(2)AOF文件有序的保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。
(3)AOF是增量操作。
缺点:
(1)对于相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积。
(2)根据所使用的fsync策略,AOF的速度可能会慢于RDB。
6、选择
如果你非常关心你的数据,但仍然可以承受数分钟以内的数据丢失,选择RDB持久化,如果你对数据的完整性要求较高,选择AOF。